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

问题描述 投票:0回答:1

我有以下查询:

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

我该如何解决以下问题?

sql postgresql case
1个回答
3
投票

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%'(注意最后的%

© www.soinside.com 2019 - 2024. All rights reserved.