FB3. Округление преобразования строки в число

Привет всем.

Открыл для себя, что в FB3 пара запросов:

select cast('1.5' as integer) from dual
select cast(cast('1.5' as numeric(3,1)) as integer) from dual

возвращает двойку.

Точнее, про второй я как бы это знал и учитывал. А вот про первый нет …

Если мне не изменяет память, лет пятнадцать (а то и больше) вместо округления было обрезание.

IBProvider в первом случае округляет и, помню, мне говорили что я пру против сервера …


В общем, меня это настолько удивило, что я проверил на IB5.6.

Фух, память мне не изменяет.

«cast(‘1.5’ as integer)» возвращает 1.

«cast(cast(‘1.5’ as numeric(3,1)) as integer)» возвращает 2.

PS. Вот жеж …

3 комментария

dimitr  on 25 февраля, 2021

В IB5.6 какой диалект был единственным? А в FB3 с каким проверял? Лучше бы проверил на IB6 в 3-м диалекте.

dimitr  on 25 февраля, 2021

А вообще, похоже на CORE-1120 🙂

Dmitry Kovalenko  on 25 февраля, 2021

>Лучше бы проверил на IB6 в 3-м диалекте.

Я сделал даже лучше — проверил на IB 14.1.0.231, третий диалект.

Запрос

select cast('1.5' as integer), cast(cast('1.5' as numeric(3,1)) as integer) from dual

возвращает значения 1 и 2.

Там за двадцать лет ничего не поменялось …

>А вообще, похоже на CORE-1120

Adriano — мой герой!

Leave a Comment