[英]Convert date to varchar then compare
我有一個帶有datetime列begindate
的表信息。
我嘗試了以下2條SQL語句:
select *
from info
where begindate > '06/30/2018'
select *
from info
where convert(varchar, begindate, 101) > '06/30/2018'
第一個查詢結果是正確的,但是第二個查詢結果錯誤地包含了那些晚於“ 06/30/2017”的開始日期。
誰能告訴我這是什么原因? 是否有任何在線資源? 謝謝
原因是字符串比較和DateTime
比較的工作方式不同。
而且無論如何,您都不想轉換該列的值,因為它將阻止SQL Server使用可能包含此列的任何索引。
最好的辦法是將列中的數據與DateTime
數據類型而不是字符串進行比較。
如果您使用文字字符串作為DateTime
值,則最好的選擇是使用ISO 8601格式yyyy-mm-ddTHH:mm:ss.mmm
( yyyy-mm-ddTHH:mm:ss.mmm
2018-06-30T00:00:00
)或更不易yyyy-mm-ddTHH:mm:ss.mmm
的替代方法yyyymmdd
( 20180630
)如果您只關心日期本身-這將使SQL Server可以將字符串值正確轉換為DateTime
,因為它是明確的且與文化無關。
當我檢查時:
第一個查詢:它將在沒有正確比較的情況下為您返回行,因為您正在將datetime
與字符串Date
進行比較
SELECT *
FROM info
WHERE begindate>'06/30/2018'
第二個查詢:哪個工作正常(請參閱腳本)
SELECT *
FROM info
WHERE convert(varchar,begindate,101)>'06/30/2018'
這是腳本:
CREATE TABLE INFO
(
beginDate datetime NULL
)
INSERT INTO INFO VALUES ('2018-07-30 12:28:06.167')
INSERT INTO INFO VALUES ('2018-07-03 12:28:06.167')
SELECT * FROM info where begindate>'06/30/2018'
SELECT * FROM info where convert(varchar,begindate,101)>'06/30/2018'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.