【问题标题】:MySQL: Get the datetime field with time part reset to midnight (00:00:00)?MySQL:获取时间部分重置为午夜(00:00:00)的日期时间字段?
【发布时间】:2021-10-11 21:32:53
【问题描述】:

我正在尝试从 tmp 表中查询 PurchaseDate 日期时间列以及自定义列 PurchaseDate 列,时间为 00:00:00 / 午夜:

PurchaseDate StartOfDay
1996-07-16 20:00:00 1996-07-16 00:00:00
1996-07-10 21:19:00 1996-07-10 00:00:00
1996-07-12 22:18:00 1996-07-12 00:00:00

我无法使用DATEDIFF() 做到这一点。我怎样才能以最简单的方式做到这一点?

按照建议,我已尝试使用date()。但是,这会将列类型转换为日期,我想将其保留为日期时间。

【问题讨论】:

  • select purchaseDate, date(purchaseDate) startOfDay from mytable
  • @Bohemian ♦ 将列类型转换为日期。我想将该字段保留为日期时间。
  • 将列类型转换为日期。 ???不会。这会将获得的列的 value 转换为 DATE 数据类型,从而将时间部分归零。表中的列保持不变。
  • 我无法使用 DATEDIFF() 来做到这一点。* 你为什么这么认为? DATEDIFF() 切断两个操作数的时间部分,然后减去日期。 DATEDIFF() function: DATEDIFF() 返回 expr1 - expr2 表示为从一个日期到另一个日期的天数。 expr1 和 expr2 是日期或日期和时间表达式。 在计算中仅使用值的日期部分。
  • @Akina,对不起,我并不是说它将列类型转换为日期,但自定义列的最终结果显示为日期,而我需要日期时间格式。正如您对datediff() 所说,它仅使用日期部分,但我什至需要考虑时间部分,尽管它是00:00:00。但我现在已经使用了 Bohemian 的解决方案。感谢您的意见!

标签: mysql sql datetime


【解决方案1】:

转换为date以截断时间部分,然后转换为datetime

select
    PurchaseDate,
    cast(date(PurchaseDate) as datetime) as StartOfDay
from mytable

live demo

【讨论】:

  • 我也试过这个,但我猜这可能是一种很老套的方法。我只是想确定这是最好的方法,因为我将使用此操作查询大型数据集。
  • @NikhilPNaik 您是在使用 where 子句中的午夜值搜索行,还是只是像这样选择它?
  • ♦,我没有按午夜值过滤。只需要使用内置功能选择它。您共享的那个效果很好,但只是想要关于性能的建议,以防日期时间列上有索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2014-02-19
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多