Sql-Server
轉換日期並按年份過濾
我有一個“yyyymmdd”格式的日期欄位,我需要使用該欄位按年份過濾查詢。
例如,在我的表中有一個“20180401”格式的“過帳日期”欄位,我需要將查詢過濾到僅包含 2018 年的記錄。
DATE
如果您使用正確的日期類型(即而不是)會更好VARCHAR
,因為這會給您帶來幾個優勢:
- 完整性:防止在列中插入無意義的數據,例如“20181301”、“20190133”、“2018ABCd”、“今天”、“Xmas19”等。
- 儲存和索引大小:
DATE
為 3 個字節,而VARCHAR(8)
.- 可用性:讓您使用現成的轉換和格式功能(不是針對特定查詢,但可能針對其他查詢)。
如果您無法更改類型,那也不算太糟糕,因為您的格式至少是一種保留順序的格式,因此您可以使用可以利用索引的條件:
WHERE PostingDate >= '20180101' AND PostingDate < '20190101'
順便說一句,當(如果)您將列類型轉換為
DATE
. 什麼都不需要改變。