powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странное поведение CAST
13 сообщений из 13, страница 1 из 1
Странное поведение CAST
    #39582734
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой запрос
Код: sql
1.
2.
3.
4.
5.
select 1, cast(0.1234 as numeric(18,2)) from rdb$database
union all
select 2, cast(0.1234 as numeric(18,3)) from rdb$database
union all
select 3, cast(0.1234 as numeric(18,4)) from rdb$database


Ожидаю результат NCAST10.120020.123030.1234
Но получаю
NCAST10.123420.123430.1234
Каждый запрос по отдельности кастит правильно, но вместе...
Я ранее всегда пользовался CAST вместо ROUND. Теперь видимо буду переделывать
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582735
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить
Такое поведение повторятся на fb 3.0.2 и 2.5.8
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582743
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
диалект какой?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582749
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так не пробовали ?

select 1, cast(0.1234 as numeric(18,2))+0.00 from rdb$database
union all
select 2, cast(0.1234 as numeric(18,3))+0.00 from rdb$database
union all
select 3, cast(0.1234 as numeric(18,4))+0.00 from rdb$database
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582756
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,
Диалект 3

AltHasp,
Так работает. Но мне round проще поставить

Кроме того cast(0.1234 as int ) дает тот же результат
Код: sql
1.
2.
3.
select 1, cast(0.1234 as int) from rdb$database
union all
select 3, cast(0.1234 as numeric(18,4)) from rdb$database


NCAST10.123430.1234
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582806
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений,

по идее, сервер должен был бы материться на несоответствие типов у разных частей union. а так - приводится к максимальному типу.
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582808
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Проблема не в приведении к максимальному типу, а в том что нет округления при приведении 0.1234 к типу с меньшей точностью
Такой запрос отрабатывает правильно
Код: sql
1.
2.
3.
select 1, cast(0.1234 as numeric(18,2)) + 0 from rdb$database
union all
select 2, cast(0.1234 as numeric(18,4)) + 0 from rdb$database


А такой нет
Код: sql
1.
2.
3.
select 1, cast(0.1234 as numeric(18,2)) from rdb$database
union all
select 2, cast(0.1234 as numeric(18,4)) from rdb$database


Разница только в "+ 0"
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582830
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк ЕвгенийМимопроходящий,
Диалект 3

AltHasp,
Так работает. Но мне round проще поставить

Кроме того cast(0.1234 as int ) дает тот же результат
Код: sql
1.
2.
3.
select 1, cast(0.1234 as int) from rdb$database
union all
select 3, cast(0.1234 as numeric(18,4)) from rdb$database


NCAST10.123430.1234
Ни в какие ворота, имхо. Глюк.
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582845
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД> Ни в какие ворота, имхо. Глюк.

Не приведение типа - это баг, а не глюк (в 2.5 то же самое).
А вот молчаливый каст к максимальному типу - скорее всего,
не глюк, а корректное поведение, но нужно в стандарт глянуть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582853
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

Молчаливое приведение к максимальному типу - это нормально и правильно.
Баг состоит в том, что в процессе приведения к общему типу игнорируется промежуточное приведение
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582864
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу, и я о том же. Собсно, там Numeric и сами типы неважны -
понятно, что ты на нём споткнулся, но то же самое будет хоть
с int-ом, хоть с float-ами, хоть даже со строкой и БЛОБами -
всегда будет тупо подставляться максимальный тип вместо
всех остальных с их игнорированием (AFAIU).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582916
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам...
А вот молчаливый каст к максимальному типу - скорее всего,
не глюк, а корректное поведение, но нужно в стандарт глянуть.

Да пусть сервер кастует, на здоровье. Но после того, как выполнит явно заданный каст. Тип-то numeric, не decimal, значит, точность должна быть именно той, которую указали, а не "как минимум"...
...
Рейтинг: 0 / 0
Странное поведение CAST
    #39582923
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк ЕвгенийМолчаливое приведение к максимальному типу - это нормально и правильно.
Баг состоит в том, что в процессе приведения к общему типу игнорируется промежуточное приведениеМне пока что тоже так кажется. Детально не проверял.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странное поведение CAST
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]