приведение типа в операторе Case - PullRequest
0 голосов
/ 25 августа 2018
Segment

   1
   2
   3
   4 
  NUll
   5

Я хочу вменять «Другое», если значение сегмента равно нулю

ожидаемый результат

  Segment

   1
   2
   3
   4 
  Other
   5

Я пытался

 select 
 case when segment is null then 'Other' else segment end as segment 
 from table;

Он говоритневерный синтаксис ввода для типа "числовой": Другое

Ответы [ 2 ]

0 голосов
/ 25 августа 2018
select 
 case when CAST(segment AS CHAR) IS NULL then 'Other' else CAST(segment AS CHAR)  end as segment 
 from table
0 голосов
/ 25 августа 2018

Выражение case возвращает один тип.Проблема в том, что segment - это число, а 'Other' - это строка.Выражение должно сделать выбор, и оно выбирает числовой тип (следуя стандартным правилам SQL).

Это легко исправить.Просто приведите segment:

select (case when segment is null then 'Other' else segment::text end) as segment 
from table;

Было бы более естественно написать этот запрос, используя coalesce():

select coalesce(segment::text, 'Other') as segment
from table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...