注册 登录
编程论坛 SQL Server论坛

请教int与varchar之间的一个转换问题

南川 发布于 2010-08-16 11:33, 8374 次点击
表结构如下
只有本站会员才能查看附件,请 登录


实际数据如下
只有本站会员才能查看附件,请 登录


查询结构
只有本站会员才能查看附件,请 登录


问题:我用int的参数25作为条件去查varcha列。报错信息如上。按我的想法:SQL会把int型的25转换成varchar类型,然后到表中查数据。结构返回正常,不会报错。结果报的错如上。按错误信息提示,肯定是转换了表中的varchar列name。于是,我感觉这种思路,貌似不太合理。按我的想法,只需要把参数25从int转换成varchar,实际执行一次;而按错误信息,表中的数据需多次往int型转换。所以,请教:这里是怎么一种转换方法?

另附:
表改成这样:
只有本站会员才能查看附件,请 登录

操作结果就正常:
只有本站会员才能查看附件,请 登录
4 回复
#2
aei1352010-08-16 13:33
你直接按varchar型写成 select * from dbo.mysql where name='25'不就行了,这个可能是你要查找的条件值为整数型,于是就把name列转为整数值跟你要找的条件值做比较,'非常'无法转换所以就报错吧
#3
SQLCenter2010-08-16 14:30
SQL Server 对数据类型使用以下优先级顺序:
   1. 用户定义数据类型(最高)
   2. sql_varian t
   3. xml
   4. datetimeoffset
   5. datetime2
   6. datetime
   7. smalldatetime
   8. date
   9. time
  10. float
  11. real
  12. decimal
  13. money
  14. smallmoney
  15. bigint
  16. int
  17. smallint
  18. tinyint
  19. bit
  20. ntext
  21. text
  22. image
  23. timestamp
  24. uniqueidentifier
  25. nvarchar(包括 nvarchar(max))
  26. nchar
  27. varchar(包括 varchar(max))
  28. char
  29. varbinary(包括 varbinary(max))
  30. binary(最低)

--------------

数值类型比字符型高,所以“非常”转为INT
#4
w0010010012011-11-10 14:55
这SQLServer2000中有没有函数直接把varchar转换为Int型
#5
autobot2011-11-24 21:23
MSSqlServer的查找的时候是这样运行的,select * from table where name = 25
它会把name这列遍历一下,一个一个对name等于25的,但是因为你这样写的是告诉系统25是INT型,他要把每列全强转为INT(你定义的时候可是varchar)所以到了
转换‘非常’的时候,肯定会报错的,这就和你写这个语句(select cast('非常' as int))报的错误一样。
1