2009年11月24日 星期二

一月初到十月底的查詢

這個題目似乎很簡單

假設資料庫中有個表格如下
CREATE TABLE TX (DT DATETIME, EVENT VARCHAR(100))

一般都會以下的查詢

SELECT EVENT FROM TX WHERE DT BETWEEN '2009/1/1' AND '2009/10/31'

但陷阱會出現在 '2009/10/31' 這邊
因為 '2009/10/31' 是代表 '2009/10/31 00:00:00'

下面這筆資料就不會被擷取到
INSERT INTO TX VALUES('2009/10/31 10:10:10', 'SOMETHING WRONG')

所以敘述應改改為

SELECT EVENT FROM TX WHERE DT >= '2009/1/1' AND DT < '2009/11/1'
或是
SELECT EVENT FROM TX WHERE CONVERT(VARCHAR(8), DT, 112)
BETWEEN '20090101' AND '20091031'

會比較好

在 Oracle 也是一樣
SELECT EVENT FROM TX WHERE DT > to_date('2009/1/1', 'YYYY/MM/DD') and DT < to_date('2009/11/1', 'YYYY/MM/DD');

沒有留言:

張貼留言