這個題目似乎很簡單
假設資料庫中有個表格如下
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');
沒有留言:
張貼留言