我有一个专栏 Amount
在我的sql server数据库中定义为 varchar(20), null
.
它的价值观如下:
1.56867
2.0
2.0000
2
如果客户端应用程序中的用户输入2进行搜索,那么我需要从数据库中提取除值1.56867以外的所有记录。
因此,搜索结果应产生:
2.0
2.0000
2
我尝试在sql查询中使用它,但它仍然返回值1.56867。
CONVERT(decimal, myTable.Amout) = CONVERT(decimal, 2)
你能给个建议吗?
谢谢。
2条答案
按热度按时间093gszye1#
您应该考虑修复数据模型,将数字存储为数字而不是字符串。
也就是说,您需要为
decimal
,否则默认为decimal(38, 0)
,这将导致小数部分被截断。比如:这将为您提供最多20位数字,包括5位十进制数字。这里不需要显式地转换正确的操作数(这已经是一个文字数字了)。
如果列可能包含不能转换为数字的值,则可以使用
try_convert()
而不是convert()
以避免错误。1l5u6lss2#
问题是在转换字符串时
'1.56867'
至decimal
,sql server假定需要0位小数(正如@gmb所指出的),并将值舍入到最接近的整数(2)。另外,由于列被定义为保存字符数据,因此应该使用
try_cast()
要避免的功能Error converting data type varchar to numeric.
如果列中存在非数字数据,则会发生错误。