【发布时间】:2015-02-11 12:03:33
【问题描述】:
我有两列 id(int) 和 f_value(float) 的表 A。现在我想选择f_value 从'123' 开始的所有行。所以对于下表:
id | f_value
------------
1 | 12
2 | 123
3 | 1234
我想要第二排和第三排。我尝试将 LEFT 与演员一起使用,但那是一场灾难。对于以下查询:
select f_value, str(f_value) as_string, LEFT(str(f_value), 2) left_2,
LEFT(floor(f_value), 5) flor_5, LEFT('abcdef', 5) test
from A
我明白了:
f_value | as_string | left_2 | flor_5 | test
------------------------------------------------
40456510 | 40456510 | | 4.045 | abcde
40454010 | 40454010 | | 4.045 | abcde
404020 | 404020 | | 40402 | abcde
40452080 | 40452080 | | 4.045 | abcde
101020 | 101020 | | 10102 | abcde
404020 | 404020 | | 40402 | abcde
问题是为什么 left 对于 'test' 可以正常工作,但对于其他返回却如此奇怪的结果?
编辑:
我又做了一个测试,现在我更加困惑了。查询:
Declare @f as float
set @f = 40456510.
select LEFT(cast(@f as float), LEN(4045.)), LEFT(404565., LEN(4045.))
我明白了:
|
------------
4.04 | 4045
是否存在导致这种情况的默认强制转换? Fiddle SQL
【问题讨论】:
-
左边(f_value, 3) = '123'
-
如果值为 12.3 或 .123 怎么办?
-
@GordonLinoff 你可能是对的,所以根据这个假设回答
-
请接受您认为最好的答案
标签: sql sql-server