我正在使用LIKE
返回针对float字段的匹配数字结果。似乎一旦小数点左边有4位以上的数字,则不会返回与我的小数点右边的搜索项匹配的值。这是说明情况的示例:
CREATE TABLE number_like_test (
num [FLOAT] NULL
)
INSERT INTO number_like_test (num) VALUES (1234.56)
INSERT INTO number_like_test (num) VALUES (3457.68)
INSERT INTO number_like_test (num) VALUES (13457.68)
INSERT INTO number_like_test (num) VALUES (1234.76)
INSERT INTO number_like_test (num) VALUES (23456.78)
SELECT num FROM number_like_test
WHERE num LIKE '%68%'
该查询不会返回值为12357.68的记录,但会返回值为3457.68的记录。同样使用78(而不是68)运行查询不会返回23456.78记录,但是使用76将返回1234.76记录。
因此要提出一个问题:为什么数量更大会导致这些结果发生变化?如何更改查询以获得预期结果?
最佳答案
like
运算符需要一个字符串作为左值。根据文档,从float
到varchar
的转换可以使用several styles:
Value Output
0 (default) A maximum of 6 digits. Use in scientific notation, when appropriate.
1 Always 8 digits. Always use in scientific notation.
2 Always 16 digits. Always use in scientific notation.
默认样式适用于
3457.68
中的六位数,但不适用于13457.68
中的七位数。要使用16位数字代替6位数字,可以使用convert
并指定样式2。样式2表示一个类似于3.457680000000000e+003
的数字。但这不适用于前两位数字,并且您免费获得了意外的+003
指数。最好的方法可能是从
float
到decimal
的转换。该转换使您可以指定比例和精度。使用标度20和精度10,浮点数表示为3457.6800000000
:where convert(decimal(20,10), num) like '%68%'
关于sql - SQL Server对float字段的“喜欢”产生不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069895/