У меня есть простой запрос CASE, однако я заметил кое-что удивительное - тип данных, которые возвращает запрос, изменяется в зависимости от того, какой тип данных находится в неиспользуемой (не выбранной) ветви.
Давайте рассмотрим два тематических запроса:
A1:
SELECT
CASE 1
WHEN 3 THEN '7'
ELSE 'text answer' END
FROM SomeDatabase
B1:
SELECT
CASE 1
WHEN 3 THEN '7'
ELSE float_attribute END
FROM SomeDatabase
Запрос A1 возвратит «тот же» Запрос B1 вернет значение float_attribute (которое имеет тип float - важно!) Пока все хорошо ...
У меня есть проблема, если мы изменим эти запросы так, чтобы условие было выполнено
A2:
SELECT
CASE 1
WHEN 1 THEN '7'
ELSE 'the same' END
FROM SomeDatabase
B2:
SELECT
CASE 1
WHEN 1 THEN '7'
ELSE float_attribute END
FROM SomeDatabase
Теперь здесь начинается мое заблуждение:
Запрос A2 возвращает 7
Запрос B2 возвращает 7.000000
Несмотря на то, что оба запроса содержат одну и ту же выбранную ветвь КОГДА 1 ТО '7' , запросы возвращают значение другого типа.
Очевидно, что тип зависит от типа значения / атрибута, который находится во второй ветви, даже если он не выбран.
ПОЧЕМУ ЭТО ТАК ?? Это нормальное SQL поведение?