У меня есть стол A с двумя колонками id(int)
и f_value(float)
. Теперь я хотел бы выбрать все строки, где f_value
начинается с '123'. Итак, для следующей таблицы:Как получить первые n чисел от поплавка
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
Возникает вопрос: почему левый отлично работает для «теста», но и для других возвращений таких странных результатов?
EDIT:
Я сделал еще один тест, который я теперь я еще больше запутался. По запросу:
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 вы, вероятно, правы, поэтому ответили в соответствии с этим предположением –