我在用LIKE
返回针对浮点字段的匹配数字结果。似乎一旦小数点左侧超过 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 记录。
那么问题来了:为什么数字越大会导致结果发生变化?如何更改查询以获得预期结果?
The like
运算符需要一个字符串作为左侧值。根据文档,从float
to varchar
可以使用多种款式:
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
to decimal
。该转换允许您指定比例和精度。使用小数位数 20 和精度 10,浮点数表示为3457.6800000000
:
where convert(decimal(20,10), num) like '%68%'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)