2012-09-03 129 views
5

我想運行一個簡單的查詢,這讓我基於時間戳數據,如下所示:DB2時間戳select語句

SELECT * 
FROM <table_name> 
WHERE id = 1 
AND usagetime = timestamp('2012-09-03 08:03:06') 
WITH UR; 

這似乎並沒有記錄返回給我,而這個紀錄出現在id = 1的數據庫。

我在這裏做錯了什麼?

列使用時間的數據類型正確,設置爲時間戳。

+2

時間戳有幾分之一秒,以及。我猜這是你的問題,我沒有看到你的選擇語句中的那些。 – bhamby

回答

17

@bhamby是正確的。通過離開時間戳記值的微秒數,您的查詢只會在2012-09-03 08:03:06.000000

的使用時間上匹配如果您沒有從先前查詢中捕獲的完整時間戳記值,那麼您可以指定一個範圍謂詞,將匹配於任何微秒值對於時間:

...WHERE id = 1 AND usagetime BETWEEN '2012-09-03 08:03:06' AND '2012-09-03 08:03:07' 

...WHERE id = 1 AND usagetime >= '2012-09-03 08:03:06' 
    AND usagetime < '2012-09-03 08:03:07' 
+1

我還想指出,在指定時間戳值的可接受字符串表示形式(在您的問題中正確執行)時,不需要調用TIMESTAMP()。 –

+1

請不要使用'BETWEEN',特別是在處理日期/時間/時間戳時。首先,你的兩個'WHERE'子句是**不等於**。 –

+1

你是對的。 「BETWEEN」條件將包括以下第二條,但這兩個比較將排除第二條。 使用'BETWEEN'的另一個缺點是 - 至少在舊版本的DB2中 - 查詢優化器選擇效率較低的訪問計劃要比它對兩個顯式的範圍比較要求更高。 –