Оператор CASE, где условие включает в себя оператор IN redshift

#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