從今天查詢最後7天AS400,因爲它存儲在char類型日期如何從今天的結果,我嘗試使用諸如AS400日期查詢
where chardate >= char(days(curdate()) + 7)
但它仍然沒有工作
從今天查詢最後7天AS400,因爲它存儲在char類型日期如何從今天的結果,我嘗試使用諸如AS400日期查詢
where chardate >= char(days(curdate()) + 7)
但它仍然沒有工作
對於從今天過去7天:
where
date(substr(chardate,1,4) || '-' ||
substr(chardate,5,2) || '-' ||
substr(chardate,7,2)) between current date - 7 days and current date
要執行字符範圍比較:
where
chardate between
substr(char(current date - 7 days, iso),1,4) ||
substr(char(curernt date - 7 days, iso),6,2) ||
substr(char(current date - 7 days, iso),9,2)
and
substr(char(current date, iso),1,4) ||
substr(char(current date, iso),6,2) ||
substr(char(current date, iso),9,2)
答案有兩部分。第一個涉及這個特定風格的DB2的日期數學。相當於curdate()) + 7
的DB2表達式是current date + 7 days
。
第二個涉及將日期值轉換爲字符值(反之亦然),以便我們可以比較它們。我們需要知道什麼格式chardate
存儲日期之前,我們可以真正破解那一個。我們假設它的格式爲YYYY-MM-DD
。然後,您可以使用char(current date + 7 days, iso)
以相同的格式在將來獲得七天。
所以,用這種假設,你在那裏聲明將是
where chardate >= char(current date + 7 days, iso)
有幾個標準的日期格式date
可轉換爲:
YYYY-MM-DD
MM/DD/YYYY
DD.MM.YYYY
YYYY-MM-DD
如果您chardate
是不同的格式,你需要做一些比較繁瑣的工作,substr
。例如,要YYYY-MM-DD
轉換爲YYYYMMDD
你需要像
substr(char(current date, iso), 1, 4) ||
substr(char(current date, iso), 5, 2) ||
substr(char(current date, iso), 7, 2)
這種方法的主要問題是未存儲在「年月日」順序格式不能可靠地比較。也就是說,12311969
(即MMDDYYYY
)將比較大於01012011
,因爲就數據庫而言,你是在比較兩個八位數字。 (這就是爲什麼你應該總是存儲在實際date
領域或YYYYMMDD
或類似正常有序的格式的日期。)
我已經使用免費的實用工具叫做idate,它提供了SQL用戶定義的函數巨大的成功(UDF)的將char &數字字段中存儲的日期轉換爲日期。請注意,該解決方案需要RPG編譯器的可用性。
其中chardate> =日期(當前日期+ 7天,異)我得到了錯誤coloumn iso不在指定的表格中,我的日期格式是在yyyymmdd字符類型我試過上面的三個查詢,但它沒有奏效。也得到相同的錯誤日期,時間或時間戳字符串中的值無效 – jbsuser 2011-05-22 06:54:03
@ jbs123 @dmc用示例where語句做了一個錯字。它應該是「where chardate> = char(當前日期+ 7天,iso)」 – jamesallman 2011-05-23 14:58:01
@JamesA感謝您的更正! – dmc 2011-05-23 15:34:23
@JamesA:只要您不希望查詢使用任何包含'chardate'的索引,這可以是一個好的選擇。 – dmc 2011-05-23 15:40:24
@dmc:好點。我沒有想到索引優化。 – jamesallman 2011-05-23 16:41:37
但是它仍然返回超過65000行而不是7天的行 – jbsuser 2011-05-28 07:03:49