Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql If语句Postgres_Sql_Postgresql_Case - Fatal编程技术网

Sql If语句Postgres

Sql If语句Postgres,sql,postgresql,case,Sql,Postgresql,Case,我无法再解决我的问题,请,我正在寻找一个选择,但只有当日期低于1990年11月5日必须采取2000年1月1日,并作出选择 select (date, champ1 , champ2, champ3, CASE when (a.date <'1990-05-11') then (a.date ='2000-01-01') else a.date END as a.date from table a 选择(日期、champ1、champ2、champ3、, 案例 当(a.date

我无法再解决我的问题,请,我正在寻找一个选择,但只有当日期低于1990年11月5日必须采取2000年1月1日,并作出选择

select (date, champ1 , champ2, champ3, 
CASE
when (a.date <'1990-05-11') then (a.date ='2000-01-01') 
else a.date 
END as a.date 
from table a 

选择(日期、champ1、champ2、champ3、,
案例

当(a.date时,您不能像这样使用CASE。如果您想用其他值动态替换某些值,您需要在THEN部分中返回该值,而不是一个比较(返回布尔值)

以下假设
a.date
是使用数据类型
date

select date, champ1, champ2, champ3,
       case 
           when a.date < DATE '1990-05-11'  
               then DATE '2000-01-01'
           else a.date
       end as "date"
from table a 
选择日期、champ1、champ2、champ3、,
案例
当a.日期<日期'1990-05-11'
然后日期为“2000-01-01”
其他日期
以“日期”结束
从表a

您不能这样使用CASE。如果您想用其他值动态替换某些值,您需要在THEN部分中返回该值,而不是在比较(返回布尔值)中返回该值

以下假设
a.date
是使用数据类型
date

select date, champ1, champ2, champ3,
       case 
           when a.date < DATE '1990-05-11'  
               then DATE '2000-01-01'
           else a.date
       end as "date"
from table a 
选择日期、champ1、champ2、champ3、,
案例
当a.日期<日期'1990-05-11'
然后日期为“2000-01-01”
其他日期
以“日期”结束
从表a


不要使用本地化字符串。使用日期类型字段、日期类型参数或ISO8601格式,即
YYYY-MM-DD
。顺便问一下
a.date
的类型是什么?如果它包含本地化字符串,您将无法执行范围查询显示一些示例表数据和预期结果。(作为格式化文本,而不是图像。)@Panagiotis Kanavos我只想在表的日期字段中进行选择,我不想添加其他字段,我是否应该保留单词CASE?,我只想进行研究,如果日期低于1990年11月5日,则需要2000年1月1日本地化字符串总是失败的原因是字符串总是按字母顺序排序。这意味着
'11/05/1990'
出现在
'01/01/2000'
之后-不要介意11月5日和5月11日之间的模糊性。如果所有字符串都遵循可排序格式,如
YYYY-MM-DD
,则只能执行范围查询。尽管使用
日期
似乎没有多大意义,但速度更快、更容易、更安全。示例数据将对您的问题大有帮助。不要使用本地化字符串。请使用日期类型字段、日期类型参数或ISO8601格式,即
YYYY-MM-DD
。顺便问一下
a.date
的类型是什么?如果它包含本地化字符串,您将无法执行范围查询显示一些示例表数据和预期的分辨率ult.(作为格式化文本,而不是图像。)@Panagiotis Kanavos我只想在表的日期字段中进行选择,我不想添加其他字段,我是否应该保留单词CASE?,我只想进行研究,如果日期低于1990年11月5日,则需要2000年1月1日本地化字符串总是失败的原因是字符串总是按字母顺序排序。这意味着
'11/05/1990'
出现在
'01/01/2000'
之后-不要介意11月5日和5月11日之间的模糊性。如果所有字符串都遵循可排序格式,如
YYYY-MM-DD
,则只能执行范围查询。尽管使用
日期
似乎没有多大意义,但速度更快、更容易、更安全。示例数据将对您的问题大有帮助。Thanq All,只是我有一个错误:在ligne中的“;”处或附近出现语法错误FROM@JAVAINMYDNA不是这个答案的问题。这里没有
。你到底试了什么?@Panagiotis Kanavos,不,不,那是内部连接的附近,因为有连接:)@JAVAINMYDNA:我的答案中没有连接。@JAVAINMYDNA不在您发布的查询中。问题中没有连接。人们无法猜测您甚至没有发布的代码有什么问题。Thanq All,只是我有错误:语法错误在或接近“;”在线FROM@JAVAINMYDNA不是这个答案的查询。这里没有
。你到底试了什么?@Panagiotis Kanavos,不,不,靠近内部连接,因为有连接:)@JAVAINMYDNA:我的答案中没有连接。@JAVAINMYDNA不在你发布的查询中。这个问题没有人加入。人们无法猜测你甚至没有发布的代码有什么问题。