错误:运算符不存在:字符变化 = 布尔值

H D*_*ndi 1 sql postgresql case

我有以下查询:

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";
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,出现以下错误:

> 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
Run Code Online (Sandbox Code Playgroud)

我该如何解决以下问题?

a_h*_*ame 5

CASE 表达式有两种形式:

一个“短”形式,只支持相等,你首先声明表达式,然后是应该比较的值(使用=),例如

 CASE some_column
    WHEN 1 THEN 'One'
    WHEN 2 THEN 'Two'
    ELSE 'Something else'
 END
Run Code Online (Sandbox Code Playgroud)

或者更详细的版本,您可以为每个WHEN. 但在这种情况下,您不能在 CASE 之后使用表达式:

 CASE -- nothing here!
    WHEN some_column = 1 THEN 'One'
    WHEN some_column = 2 THEN 'Two'
    ELSE 'Something else'
 END
Run Code Online (Sandbox Code Playgroud)

因此,您需要将 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 
Run Code Online (Sandbox Code Playgroud)

使用没有通配符的 LIKE 真的没有意义。"name" LIKE 'Refill-ART'与 相同"name" = 'Refill-ART'

你可能的意思是"name" LIKE 'Refill-ART%'(注意%最后的)