2012-05-28 166 views
10

我在DB2表中有一個DB2 DATE類型字段。 我想通過日期篩選器選擇數據。例如:比較DB2日期

SELECT * 
FROM table 
WHERE registrationdate > '2002-10-01'; 

從上面的查詢中,我從'1943-10-01'獲得記錄,但是這是不正確的。

這些不工作,要麼:

registrationdate > date('2002-10-01') 
date(registrationdate) > date('2002-10-01') 
date(registrationdate) > '2002-10-01' 

如何,我需要比較日期?

+1

如何被定義的 「registrationdate」 列?也許列數據類型不是日期,如果是,那麼你的原始查詢應該已經工作。 – NealB

回答

3

我探討一些其他的問題,數據庫,重新啓動後,它開始工作,所以這現在正常工作:

registrationdate > '2002-10-01' 
13

字面一個DATE SQL標準格式爲:

DATE '2002-10-01' 

最起碼,這是值得嘗試:

SELECT * 
    FROM table 
WHERE registrationdate > DATE '2002-10-01'; 
+0

如果registrationdate被定義爲時間戳,只是說時間戳'2012-12-21' – fedvasu

0

使用此格式。

registrationdate > 'mm/dd/yyyy' 
+0

假設'registrationDate'是一個日期類型,更改格式將不起作用。如果它類似於char類型,則這個**將不起作用全部** - 您選擇的格式不能很好地排序。由於某種原因,ISO是標準推薦格式。 –

3

用於日期的默認格式是由DB2數據庫的地域代碼(其可以在創建數據庫時指定)確定。例如,我的數據庫是使用territory = US創建的。因此日期格式如下所示:

values current date 
1 
---------- 
05/30/2003 

1 record(s) selected. 

您可能會從DB CFG獲取地區代碼。

db2 get db cfg | egrep 'code|territory' 
Database territory          = US 
Database code page          = 1208 
Database code set          = UTF-8 
Database country/region code       = 1 

即,格式爲MM/DD/YYYY。如果要更改格式,可以將db2實用程序包的集合綁定爲使用不同的日期格式。

要使用SQL獲得當前的日期,時間和時間戳,(基本上給你的日期格式是什麼樣的想法)引用適當的DB2寄存器: 的SYSIBM.SYSDUMMY1表是一種特殊的內存可以用來發現DB2的值表登記

db2 "SELECT current date FROM sysibm.sysdummy1 " 

1 
---------- 
06/02/2014 

    1 record(s) selected. 

,如果我們離開了在功能上引號的日期功能仍然有效,甚至,但結果是不正確的:

db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 " 

1 
---------- 
05/24/0006 

    1 record(s) selected. 

當DATE函數獲取字符串作爲輸入時,它假定它是DB2日期的有效字符表示形式,並相應地轉換它。相反,當輸入是數字時,函數假定它代表從當前時代開始(即0001-01-01)開始減去一天的天數。在上面的查詢中,輸入是2001-09-22,等於(2001-9)-22,等於1970天。

如果以上所有條件都適用,下面的命令應該適用於您的問題。

SELECT * FROM table WHERE registrationdate > '10/01/2002';