我LIKE用来针对浮点型字段返回匹配的数值结果。看来,一旦小数点左边有4位以上的数字,就不会返回与我的小数点右边的搜索项匹配的值。这是说明情况的示例:
LIKE
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可以使用几种样式:
like
float
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免费获得了意外的指数。
3457.68
13457.68
convert
3.457680000000000e+003
+003
最好的方法可能是从转换float为decimal。该转换使您可以指定比例和精度。使用标度20和精度10,浮点数表示为3457.6800000000:
decimal
3457.6800000000
where convert(decimal(20,10), num) like '%68%'