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
- 当一个新员工加入中间时,它具有空值
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')-当前日期结束