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)
我该如何解决以下问题?
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%'(注意%最后的)