#sql #string #case #amazon-redshift
#sql #строка #случай #amazon-redshift
Вопрос:
CASE
WHEN code IN ('FJS354', 'JDF334')
THEN 'Lower_form'
ELSE 0
END AS format
Это возвращает ошибку в Redshift
недопустимый синтаксис ввода для целого числа: «Lower_form»
Я знаю, что если я изменю ‘Lower_form’ на целое число, это будет работать, однако я хочу, чтобы этот столбец был строкой. Есть ли способ сделать это?
Комментарии:
1. Различные возвращаемые значения выражения case должны иметь совпадающие типы данных. char и int не являются.
2. Возможно, ваш запрос выдает какой-то отчет, но на вашем месте я бы просто сделал
CASE WHEN code in ('FJS354','JDF334') THEN 1 ELSE 0 END as Lower_form
. Он занимает меньше места и более эффективен.
Ответ №1:
Я хочу, чтобы этот столбец был строкой.
Все ветви case
выражения должны возвращать один и тот же тип данных. Вы предоставляете два литеральных значения, тип данных которых не совпадает (строка и целое число): база данных принимает решение преобразовать их оба в целые числа, а это не то, что вы хотите.
Устраните двусмысленность, указав явно тип данных, который вы хотите вернуть. То есть сделайте этот литерал 0
строкой:
CASE WHEN code in ('FJS354','JDF334')
THEN 'Lower_form'
ELSE '0'
END as format