Как функция Coalesce работает с типом данных - PullRequest
0 голосов
/ 29 января 2020

Я новичок в функции COALESCE в REDSHIFT. Я запускал ниже четырех запросов в mysql и Redshift.

1-й и 2-й запросы выполнялись как ожидалось как для mysql, так и для красного смещения. Но для 3-го и 4-го запросов я получаю два разных результата в mysql и Redshift. Как это ведет себя?

  1. select COALESCE(null,null,1) -> 1

  2. select COALESCE(null,null,'John') -> 1

  3. select COALESCE(null,null,1,'John') -> (красное смещение: error, mysql: 1)

  4. select COALESCE(null,null,'John',1) -> (красное смещение: error , mysql: John)

Также этот запрос должен выдавать ошибку в mysql, но он успешно выполнен. Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Хотя это не написано в документации, но объединение работает на совместимых типах данных. Невозможно сравнить целое число и varchar.

Ошибка становится более очевидной, если вместо значений в жестком коде указать имя столбца. Попробуйте выполнить это:

select coalesce(integer_column, varchar_column) from a_table;

Вы получите сообщение об ошибке, говорящее что-то вроде этого:

типы слияния integer и varchar не могут быть сопоставлены.

0 голосов
/ 29 января 2020

Руководство разработчика базы данных Amazon Redshift утверждения:

Выражение NVL идентично выражению COALESCE. NVL и COALESCE являются синонимами.

Синтаксис

NVL | COALESCE ( expression, expression, ... ) 

Выражение NVL или COALESCE возвращает значение первого выражения в списке, которое не является нулевым. Если все выражения равны нулю, результат равен нулю. Когда найдено ненулевое значение, остальные выражения в списке не оцениваются.

Этот тип выражения полезен, когда вы хотите вернуть значение резервной копии для чего-либо, когда предпочтительнее значение отсутствует или равно нулю. Например, запрос может вернуть один из трех телефонных номеров (сотовый, домашний или рабочий, в указанном порядке), в зависимости от того, что будет первым в таблице (не ноль).

Если вы получили ошибка, это может означать, что тип данных возвращаемого значения не совпадает с типом данных поля набора записей или любой другой структуры, которая должна принимать возвращаемое значение.

PS. Будете ли вы показывать сообщения об ошибках?

...