Select PostgreSQL中的条件替换

Select PostgreSQL中的条件替换,postgresql,Postgresql,我的表格有end\u date列作为date类型 它将具有实际值、默认值或空值 如果为员工填充结束日期,则它将具有实际日期 默认日期为填充的yyyy-MM-dd格式的2000-01-01 每月一日 当一个新员工加入中间时,它具有空值 我需要做一个查询,如果它有一个实际的结束日期,它将返回以天为单位的差异;如果有NULL或默认值,则返回空白 Select GREATEST(0, DATE_PART('day', end_date::timestamp - CURRENT_DATE)) 这是目

我的表格有
end\u date
列作为
date
类型

它将具有实际值、默认值或空值

  • 如果为员工填充结束日期,则它将具有实际日期
  • 默认日期为填充的yyyy-MM-dd格式的
    2000-01-01
    每月一日
  • 当一个新员工加入中间时,它具有空值
我需要做一个查询,如果它有一个实际的结束日期,它将返回以天为单位的差异;如果有NULL或默认值,则返回空白

Select GREATEST(0, DATE_PART('day', end_date::timestamp - CURRENT_DATE))

这是目前为止我能做的最好的赌注。没有
If-Else
条件的情况下,有什么方法可以这样做吗?

请尝试在您的选择列表中使用此选项:

NULLIF(结束日期,'2000-01-01')-当前日期
NULL如果
if将返回
NULL
,如果两个参数相同,则返回第一个参数,否则返回。使用
NULL
值进行减法(在运算符的任何一侧)也将产生
NULL
,因此,如果
end_date
未设置或设置为默认值(如果您需要其他特殊值,请围绕此“查询”),则这将为您提供一个“空白”输出使用
合并
,并添加默认空白值作为其第二个参数)。否则你会得到你想要的不同


我不明白,为什么需要强制转换到
时间戳
。这将使子部分返回一个
间隔
,但您需要一个
整数
,这是通过减去两个
日期
s得到的结果。

如果结束日期是过去的,这将给出负值@IslingreWell yeah。。你需要什么?也许你想用一个
ABS
最棒的
环绕。但对我来说,如果结束日期在过去,负值确实使senseI需要显示0,如果结束日期在未来,则不需要显示天数,否则为空
(如果为空,则为空)(如果为空(结束日期,'2000-01-01')<当前日期,则为0,否则为空)(结束日期,'2000-01-01')-当前日期结束