我正在做一些计算,但我的计算已关闭,因为我的日期字段显示时间戳,而我只想在我进行计算时仅使用日期。我怎么能忽略这些会议记录,并在计算时只使用日期?这里是我有:如何使用Netezza将日期时间转换为日期
SELECT EF.DSCH_TS,
CASE WHEN EXTRACT (DAY FROM EF.DSCH_TS - EF.ADMT_TS)>=0 THEN 'GroupA' END AS CAL
FROM MainTable EF;
我正在做一些计算,但我的计算已关闭,因为我的日期字段显示时间戳,而我只想在我进行计算时仅使用日期。我怎么能忽略这些会议记录,并在计算时只使用日期?这里是我有:如何使用Netezza将日期时间转换为日期
SELECT EF.DSCH_TS,
CASE WHEN EXTRACT (DAY FROM EF.DSCH_TS - EF.ADMT_TS)>=0 THEN 'GroupA' END AS CAL
FROM MainTable EF;
使用date_trunc()
与'day'
的第一个参数。我认为这是你想要的:
SELECT EF.DSCH_TS,
(case when date_trunc('day', EF.DSCH_TS) >= date_trunc('day', EF.ADMT_TS) THEN 'GroupA' END) AS CAL
FROM MainTable EF;
你可能想考虑重写你的case语句返回interval。这将允许更多的灵活性。
SELECT EF.DSCH_TS,
CASE
WHEN age(date(EF.DSCH_TS),date(EF.ADMT_TS))>= interval '6 days'
THEN 'GroupA' END AS CAL
FROM MainTable EF;
Netezza公司已经内置了这个功能只需使用:
SELECT DATE(STATUS_DATE) AS DATE,
COUNT(*) AS NUMBER_OF_
FROM X
GROUP BY DATE(STATUS_DATE)
ORDER BY DATE(STATUS_DATE) ASC
这将只返回timetamp的日期部分和有用得多比它TO_CHAR()
强制转换为字符串,因为它将在GROUP BY
,HAVING
以及其他netezza日期功能中工作。 (凡为TO_CHAR
方法不会)
此外,DATE_TRUNC()
功能将拉动一个特定的值了时间戳的(“日”,“月,‘年’,等等。),但这些不不超过一多个功能和连接。
DATE()是对此的完美和简单的答案,我很惊讶地看到Stack上这个问题有这么多误导性答案。我看到TO_DATE
很多,这是Oracle的这个功能,但不会在Netezza
上工作。
有了您的查询,假设你有兴趣在午夜天到两个时间戳的午夜,它会是这个样子:
SELECT EF.DSCH_TS,
CASE
WHEN EXTRACT (DAY FROM (DATE(EF.DSCH_TS) - DATE(EF.ADMT_TS)))>=0 THEN 'GroupA'
END AS CAL
FROM MainTable EF;
@moe这应该被标记为问题的答案。将时间戳投射到日期会删除该字段的所有时间详细信息,这正是问题标题所期望的。 – dlamblin
我得到错误:函数“DATE_TRUNC(TIMESTAMP) '不存在 – moe
@moe。 。 。我从第二个电话中离开了第一个论点。 –
谢谢戈登,这工作,但我有点困惑这个功能。我如何修改,如果我想我的情况是这样的:其中EF.DSCH_TS> 6?因为我想测试天数是否大于0或1,2,3等,所以我有很多案例陈述,我没有在这里展示。感谢澄清... – moe