转换日期并按年份过滤

Mik*_*nes 1 sql-server type-conversion cast date sql-server-2016

我有一个“yyyymmdd”格式的日期字段,我需要使用该字段按年份过滤查询。

例如,在我的表中有一个“发布日期”字段,格式为“20180401”,我需要将查询过滤为仅包含 2018 年的记录。

ype*_*eᵀᴹ 5

如果您使用正确的日期类型,即 ieDATE和 not VARCHAR,那会好得多,因为这会给您带来几个好处:

  • 完整性:防止在列中插入无意义的数据,如“20181301”、“20190133”、“2018ABCd”、“今天”、“Xmas19”等。
  • 存储和索引大小:DATE3 个字节 vs 9 个VARCHAR(8).
  • 可用性:让您使用现成的转换和格式函数(不是用于特定查询,但可能用于其他查询)。

如果您不能更改类型,那也不错,因为您的格式至少是保留顺序的格式,因此您可以使用可以利用索引的条件:

WHERE PostingDate >= '20180101' 
  AND PostingDate  < '20190101'
Run Code Online (Sandbox Code Playgroud)

顺便说一下,当(以及如果)您将列类型转换为DATE. 什么都不需要改变。

  • 您可以以不同的方式编写它,但这会使查询变慢。 (2认同)
  • ...当然,当您修复架构时,这会中断。永远不要将日期作为字符串存储,原因与不将平底锅放在银器抽屉中或将内衣挂在大厅壁橱中的原因相同。 (2认同)