ОШИБКА: оператор не существует: переменный символ = логическое значение - PullRequest
0 голосов
/ 05 сентября 2018

У меня следующий запрос:

SELECT
CASE
    tbl_appointment_types."name" 
    WHEN tbl_appointment_types."name" LIKE 'Refill-ART' THEN
    'Re-Fill' 
    WHEN tbl_appointment_types."name" = 'Enhanced Adherence'::character varying THEN
    'Enhanced Adherence' 
    WHEN tbl_appointment_types."name" = 'PHARMACY APPOINTMENT'::character varying THEN
    'Re-Fill' ELSE tbl_appointment_types."name" 
END 
FROM
    tbl_appointment INNER JOIN tbl_appointment_types ON tbl_appointment_types."id" = tbl_appointment.app_type_1 
GROUP BY
    tbl_appointment_types."name";

Когда я пытаюсь запустить его, я получаю следующую ошибку:

> ERROR:  operator does not exist: character varying = boolean
  LINE 4:  WHEN tbl_appointment_types."name" LIKE 'Refill-ART' THEN
           ^
  HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

> Time: 0.054s

Как мне решить следующую проблему?

1 Ответ

0 голосов
/ 05 сентября 2018

CASE-выражение может быть двух видов:

«Короткая» форма, которая поддерживает равенство, когда вы сначала формулируете выражение, а затем значения, с которыми оно должно сравниваться (используя =), например,

 CASE some_column
    WHEN 1 THEN 'One'
    WHEN 2 THEN 'Two'
    ELSE 'Something else'
 END

Или более подробная версия, в которой вы можете использовать разные условия для каждого WHEN. Но в этом случае вы можете не иметь выражение после CASE:

 CASE -- nothing here!
    WHEN some_column = 1 THEN 'One'
    WHEN some_column = 2 THEN 'Two'
    ELSE 'Something else'
 END

Итак, вам нужно написать выражение CASE следующим образом:

CASE -- nothing here!
   WHEN tbl_appointment_types."name" LIKE 'Refill-ART' THEN 'Re-Fill' 
   WHEN tbl_appointment_types."name" = 'Enhanced Adherence' THEN 'Enhanced Adherence' 
   WHEN tbl_appointment_types."name" = 'PHARMACY APPOINTMENT' THEN 'Re-Fill' 
   ELSE tbl_appointment_types."name" 
END 

Использование LIKE без подстановочного знака на самом деле не имеет смысла. "name" LIKE 'Refill-ART' совпадает с "name" = 'Refill-ART'.

Вы, вероятно, имели в виду "name" LIKE 'Refill-ART%' (обратите внимание на % в конце)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...