Sql-Server

轉換日期並按年份過濾

  • April 21, 2020

我有一個“yyyymmdd”格式的日期欄位,我需要使用該欄位按年份過濾查詢。

例如,在我的表中有一個“20180401”格式的“過帳日期”欄位,我需要將查詢過濾到僅包含 2018 年的記錄。

DATE如果您使用正確的日期類型(即而不是)會更好VARCHAR,因為這會給您帶來幾個優勢:

  • 完整性:防止在列中插入無意義的數據,例如“20181301”、“20190133”、“2018ABCd”、“今天”、“Xmas19”等。
  • 儲存和索引大小:DATE為 3 個字節,而VARCHAR(8).
  • 可用性:讓您使用現成的轉換和格式功能(不是針對特定查詢,但可能針對其他查詢)。

如果您無法更改類型,那也不算太糟糕,因為您的格式至少是一種保留順序的格式,因此您可以使用可以利用索引的條件:

WHERE PostingDate >= '20180101' 
 AND PostingDate  < '20190101'

順便說一句,當(如果)您將列類型轉換為DATE. 什麼都不需要改變。

引用自:https://dba.stackexchange.com/questions/240311