Postgresql postgres-CASE计算确定结果时不需要的任何子表达式

Postgresql postgres-CASE计算确定结果时不需要的任何子表达式,postgresql,case,Postgresql,Case,我有以下3个postgres中的case表达式示例,我希望以相同的方式进行计算。但是,第一个和第三个给出错误:整数的输入语法无效:“2017,7”。第二个似乎还可以。为什么会有区别 博士后国家 “大小写表达式不会计算任何不正确的子表达式 需要确定结果。” 选择0=0时的大小写,然后选择12000 结束 选择0=0时的大小写,然后选择1

我有以下3个postgres中的case表达式示例,我希望以相同的方式进行计算。但是,第一个和第三个给出错误:整数的输入语法无效:“2017,7”。第二个似乎还可以。为什么会有区别

博士后国家

“大小写表达式不会计算任何不正确的子表达式 需要确定结果。”

选择0=0时的大小写,然后选择1<2
当0=2时,则('2017.7')::bigint>2000
结束

选择0=0时的大小写,然后选择1<2
当0=2时,则2000=('2017.7'| |“”):bigint
结束

选择(数组[1,2])[1]=1时的大小写,然后选择1<2
当(数组[1,2])[1]=2时,则2000=('2017.7'| |')::bigint
结束

我相信Postgres中有内部优化器来决定应该编译和检查哪个部分。如果在第二个条件中切换WHEN条件,也会出现错误。此外,在第一个查询中,您使用逗号作为十进制分隔符,而不是点。
select case when 0 = 0 then 1 < 2
        when 0 = 2 then ('2017.7')::bigint > 2000
    end 
select case when 0 = 0 then 1 < 2
        when 0 = 2 then 2000 = ('2017.7'||'')::bigint 
    end 
select case when (array[1,2])[1] =1 then 1 < 2
        when (array[1,2])[1] = 2 then 2000 = ('2017.7'||'')::bigint 
    end