2012-09-17 93 views
1

我試圖查詢在昨天上午6點和今天上午6點之間發生的數據。db2日期格式concat特定時間

我有一個串聯問題。

這是我試過的。

Where update_time between date(CURRENT DATE,'mm/dd/yyyy 06:00:00')- 1 DAYS 
         and date(CURRENT DATE,'mm/dd/yyyy 06:00:00') 
+0

你真的不應該使用'BETWEEN' - 如果你在_exactly_ 6AM有一個事件會發生什麼?因爲它會被包含在_both_ days(今天,明天),可能不是你想要的。使用顯式範圍(包含下限包含,上限排他或'update_time> = CURRENT_TIMESTAMP - 1天和update_time 'updated_at') - 它是噪聲,並且可能會過時。 –

回答

0

試試這個:

WHERE UPDATE_TIME 
BETWEEN TIMESTAMP(CHAR(CURRENT DATE,ISO) || ' 06:00:00') - 1 DAY 
AND TIMESTAMP(CHAR(CURRENT DATE,ISO) || ' 06:00:00') 

更新回答X-Zero的評論:

的DB2功能CHAR(CURRENT DATE,ISO)取當前日期,並將其轉換爲在ISO格式的字符串。以今天的日期,CHAR函數將返回「2012-09-18」。

接下來,我們將(||)時間字符串連接到日期字符串。時間字符串中的空格以正確的格式創建字符DB2時間戳。 「2012-09-18 06:00:00」。

最後,DB2函數TIMESTAMP採用字符DB2時間戳並將其轉換爲實際的DB2時間戳。

+0

您不需要(至少明確地)將'CURRENT_DATE'強制轉換爲字符,以及時間部分中的前導空格是什麼?此外,你可以阻止他使用'BETWEEN' ... –

+0

@ X-Zero:我測試了這個WHERE子句,我知道它的工作原理。 –

+0

我確定它的確如此;我只是想知道爲什麼你正在執行演員,當該函數的第一件事是將該字符日期_back_轉換爲實際的日期類型。並且我警告不要「BETWEEN」,因爲在隨後的日子裏執行這個聲明將包括多次更新在_exactly_6AM的行 - 「今天」和「明天」。 –