2014-01-27 137 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

相關問題