今天也遇到了下面問題。以後使用Between 都要注意了,最好不用!
1.問題:
有五條資料如下:
2010-12-01 12:16:10.000
2010-12-02 13:11:28.000
2010-12-03 13:49:15.000
2010-12-04 13:52:28.000
2010-12-05 13:52:28.000
我使用select * from table where [time] between '2010-12-1' and '2010-12-6' 能顯示出這五條
如果我使用select * from sk_SmsSee where [time] between '2010-12-1' and '2010-12-5'
為什麼就顯示4條呢?
2010-12-01 12:16:10.000
2010-12-02 13:11:28.000
2010-12-03 13:49:15.000
2010-12-04 13:52:28.000
換句話說最後的日期總是不顯示為什麼呢?
經過測試 代碼換成select * from table where [time]>='2010-12-1 12:00:00' and [time]<='2010-12-5 12:00:00' 也是顯示4條。既然資料庫中存在2010-12-5日的資料,那為什麼[time]<='2010-12-5 ' 查不出來呢?
2.答案如下:
MS SQL Server 系統中使用Bewteen ... And 其範圍是閉區間,即包含左右邊界值在內的。
另外在MS SQL 系統中對於日期DATE-->DATETIME隱式轉化時,系統會自動增加 TIME欄位00:00:00
即從日期型 " 2010-12-01" 隱式轉化為 日期時間型時為 "2010-12-01 00:00:00"
所以對日期型使用Between ...AND...時,即實際只會包含另邊值的部分值,可以使用半開半閉區間( >= && < )實現你所提到的問題。