【问题标题】:How to extract dates with datatye DATETIME from colum A in table X and put them into Table Y while changing datatype into DATE如何从表 X 中的列 A 中提取数据类型为 DATETIME 的日期并将它们放入表 Y 中,同时将数据类型更改为 DATE
【发布时间】:2013-10-28 21:32:10
【问题描述】:

长标题,简单的意思: 如何从存储在一个列中的“2014-04-04 10:47:30.000”之类的日期中提取,它的组件是年、月和日? 我对时间不感兴趣。

例如,我有一个名为“事件”的表。在表中,我们有一个名为“IncidentID”的列和一个名为“ReportingDate”的列,其中存储了上述提到的日期。假设我们有大约 50k 个事件,因此我们也有 50k 个日期。 一年有365天。我想查询在不同日期(例如 2013 年 10 月 5 日)报告的事件的计数。

那么:如何获取日期的组件并将它们放入另一个表中,同时拥有自己的组件列,以及如何查询事件?

我想一开始我必须将日期的数据类型从 DATETIME 更改为 DATE,但我不太确定如何更进一步。任何人都可以在给我代码的同时帮助我并解释它对 sql-noob 的作用吗? :-)

【问题讨论】:

  • cast(datetimecolumn as date)
  • @Laurence 可以,但是: (a) 在几乎所有情况下,您都希望避免对列执行表达式,因为它会阻碍 SQL Server 有效使用索引的能力。 (b) 虽然在当前版本的 SQL Server 中强制转换为日期可能是该规则的一个例外,但这并不意味着它会一直以这种方式工作,也不意味着它很棒;见this answer by Martin Smith。正确的方法是使用范围查询,例如Hamlet's answer below
  • @AaronBertrand 你说得对,我没有阅读完整的问题。

标签: sql sql-server date datetime extract


【解决方案1】:

实现这一目标

我想查询报告的事件计数 不同的日期 - 例如 2013 年 10 月 5 日。

你还没有这样做:

我想一开始我必须将日期的数据类型从 DATETIME 到 DATE,但我不太确定如何更进一步。

随便查询

SELECT
  IncidentID
FROM incidents
WHERE ReportingDate >= '20131005'
    AND ReportingDate < '20131006' 

【讨论】:

  • 有趣 - 不知道,但它当然是有道理的。非常感谢您的回答。如果我有什么不太清楚的地方,我会回来的。 :-)
猜你喜欢
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 2017-09-07
  • 2014-02-23
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多