如何将smalldatetime分解为年,月,日指数?

Evi*_*mes 4 sql sql-server

我正在使用SQL Server 2008.

我在我的数据库中有一些日期,我"想"我想分解成更小的部分.日期是生日和死亡日.我想通过查询10月或5月12日或1945年出生的人来输出它们.

有人告诉我,这样做的一种典型方法是将日期分成小块并将每一段日期放入自己的列中,如下所示:

2001-03-12 00:00:00 // EventDate column
Run Code Online (Sandbox Code Playgroud)

添加以下列:

2001 // EventYear column
03 // EventMonth column
12 // EventDay column
Run Code Online (Sandbox Code Playgroud)

首先,这是一个很好的方法吗?如果是这样,第二,我可以以某种方式让SQL Server自动打破日期部分并将其放入自己的列中吗?

我很感激想法和解决方案.

Joe*_*uso 6

我建议您将其保留为日期列,然后在查询中使用DatePart来过滤结果.

Select * from TABLEX
where DatePart(YEAR,EventDate) = 1945
Run Code Online (Sandbox Code Playgroud)

  • 我当然不会有数百万的约会,可能只有几千.我想这样做,好像有一百万个日期.我宁愿在DateTable中写一个像select**一样的查询,而不是每个查询中的日期部分. (2认同)
  • 主要的缺点是每个查询都是一个表扫描,*可能*除了包含年,月,日等的那个顺序(我不知道DatePart是否可以攻击,但部分查询肯定不是.) (2认同)