我只是好奇,想了解 SQL Server 如何處理以下情況。我正在比較兩個日期,但兩個日期都是字串格式。
假設日期是字串,其中包含格式為YYYY-MM-DD.
下面顯示的東西實際上有效,并且會給我所有年份 < 2001 的條目。雙方是否隱式轉換為 DATE?
SELECT *
FROM X
WHERE (date < '2001')
但是當您將日期與任意字串進行比較時:
SELECT *
FROM X
WHERE (date < 'abcdefg')
結果沒有任何意義。它不會拋出例外,如果使用 '<',則回傳所有元組,如果使用 '>',則不回傳任何元組,與我放在運算式右側的字串無關。
其次,我知道從性能角度來看,字串比較非常糟糕,并且正確日期型別之間的比較要快得多。在進行此類查詢之前將整個日期列轉換為正確的格式是否值得,還是因為 SQL Server 無論如何都會進行隱式轉換而無關緊要?
有人可以向我解釋這在后臺是如何作業的嗎?謝謝!
uj5u.com熱心網友回復:
SQL 不會進行任何“隱式”轉換,因為它不知道您的字串將被解釋為日期:它怎么知道?所以比較是在字串之間進行的,結果將取決于您為資料庫設定的排序規則。這通常意味著,數字在字母之前:所以,是的,“2021”低于任何(基于字母的)字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/366946.html
標籤:sql sql-server
