2014-01-27 84 views
3

我正在做一些计算,但我的计算已关闭,因为我的日期字段显示时间戳,而我只想在我进行计算时仅使用日期。我怎么能忽略这些会议记录,并在计算时只使用日期?这里是我有:如何使用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; 

回答

0

使用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; 
+0

我得到错误:函数“DATE_TRUNC(TIMESTAMP) '不存在 – moe

+0

@moe。 。 。我从第二个电话中离开了第一个论点。 –

+0

谢谢戈登,这工作,但我有点困惑这个功能。我如何修改,如果我想我的情况是这样的:其中EF.DSCH_TS> 6?因为我想测试天数是否大于0或1,2,3等,所以我有很多案例陈述,我没有在这里展示。感谢澄清... – moe

1

你可能想考虑重写你的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; 
1

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; 
+0

@moe这应该被标记为问题的答案。将时间戳投射到日期会删除该字段的所有时间详细信息,这正是问题标题所期望的。 – dlamblin

相关问题