簡體   English   中英

將日期轉換為varchar然后比較

[英]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.mmmyyyy-mm-ddTHH:mm:ss.mmm 2018-06-30T00:00:00 )或更不易yyyy-mm-ddTHH:mm:ss.mmm的替代方法yyyymmdd20180630 )如果您只關心日期本身-這將使SQL Server可以將字符串值正確轉換為DateTime ,因為它是明確的且與文化無關。

順便說一句, 您應該停止使用DateTime並改用DateTime2

當我檢查時:

第一個查詢:它將在沒有正確比較的情況下為您返回行,因為您正在將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM