无法运行带有大小写的查询...然后...其他...结束,使用postgres

时间:2018-03-06 13:44:54

标签: sql postgresql case

我正在将进程从oracle迁移到postgres,并且验证解码不存在,我必须使用case来实现...然后...... else ... end。

问题在于,在进行查询时,我在语法中出现错误,但研究时,语法与我在下面显示的相同。

select case when (substr(min(debit.tprp_codigo), 1, 1) = 'S' then 'sorry' else 'F' end) 
from debit;

显示我的错误如下

ERROR: syntax error on or near «then»
LINE 1: ... when (substr(min(debit.tprp_codigo), 1, 1) = 'S' then 'sorr...

SQL state: 42601
Character: 62

我试图在括号()中括起案例,但它仍然显示同样的错误

select debi_correlativo,
       (case when (substr(min(debit.tprp_codigo), 1, 1) = 'S' then 'sorry' else 'F' end))
from debit;

2 个答案:

答案 0 :(得分:0)

最好删除删除所有不必要的括号:

case when substr(min(debit.tprp_codigo), 1, 1) = 'S' then 'sorry' else 'F' end

应该有用。

如果您坚持使用无用的括号,请在它们之间添加整个 case表达式:

(case when substr(min(debit.tprp_codigo), 1, 1) = 'S' then 'sorry' else 'F' end) 

条件:

case when (substr(min(debit.tprp_codigo), 1, 1) = 'S') then 'sorry' else 'F' end 

答案 1 :(得分:0)

有两种方法可以编写案例查询。在您的情况下,额外的括号会导致语法错误。

1:

case when substr(min(debit.tprp_codigo), 1, 1) = 'S' then 'sorry' else 'F' end

2:

case substr(min(debit.tprp_codigo), 1, 1) when 'S' then 'sorry' else 'F' end