如何在 SQL 中的日期时间列中添加小时、分钟和秒?

Posted

技术标签:

【中文标题】如何在 SQL 中的日期时间列中添加小时、分钟和秒?【英文标题】:How to add hours, minutes and seconds to a datetime column in SQL? 【发布时间】:2021-05-18 07:24:20 【问题描述】:

我的表中有以下日期时间列“UpdatedTime”

样本值:2021-12-31 00:00:00.000

我需要操纵小时、分钟和秒以变为23:59:59(即午夜前一秒。)

预期值:2021-12-21 23:59:59.000

提前致谢

【问题讨论】:

你在说什么 dbms?对于 MSSQL 有 DATEADD 对于 myql 有 ADDTIME 你好,我说的是MSSQL 12 月 321 日? 你试过什么?你在哪里卡住了?请向我们展示您的尝试... 您的示例值推断出这一点,但这取决于您的日期时间是否始终从 00:00:00.000 开始。 【参考方案1】:

我会使用dateadd(),但我会将其表述为:

select dateadd(second, 24 * 60 * 60 - 1, UpdatedTime)

或者只是添加一个时间值:

select UpdatedTime + '23:59:59'

【讨论】:

这项工作也是如此。非常简单高效。谢谢【参考方案2】:

您可以按如下方式使用 DATEADD() 函数(请查看 SQL Fiddle 以了解清楚):

SELECT 
  *, 
  DATEADD(hour, 23, DATEADD(minute, 59, DATEADD(second, 59, date_))) as updated_datetime
FROM dates_;

输出:

date_                   updated_datetime
----------------------- -----------------------
2021-01-01 00:00:00.000 2021-01-01 23:59:59.000

【讨论】:

太棒了!随意对答案进行投票,以便其他人能够将其称为正确:) 谢谢! 改为接受答案。无法投票导致声誉不足。再次感谢您 感谢您的澄清,@DaleK!相应地编辑了回复,不再要求投票。【参考方案3】:

假设您使用的是足够现代的 MSSQL 版本,这应该可以:

DECLARE @dt DATETIME = '2021-12-31 00:00:00.000'
SELECT DATETIMEFROMPARTS(
    DATEPART(YEAR, @dt),
    DATEPART(MONTH, @dt),
    DATEPART(DAY, @dt),

    23, /* hour */
    59, /* minute */
    59, /* second */

    0 /* fractional seconds*/

);

如果我没有提到通过计算您请求的日期时间,我也会失职,您可能正在使用反模式。如果您计算上述内容的目标是执行以下操作:

select *
from dbo.yourTable
where DateCreated >= @StartOfDay
   and DateCreated <= @EndOfDay;

如果 DateCreated 列接受像“2021-12-21 23:59:59.997”这样的值,您最终会遇到上述问题。

如果这确实是您的目标,最好将该查询编写为:

select *
from dbo.yourTable
where DateCreated >= @StartOfDay
   and DateCreated < @StartOfNextfDay;

即使用半开区间而不是全闭区间。

【讨论】:

是的,这确实是一个好点。我也应该考虑几分之一秒。谢谢!

以上是关于如何在 SQL 中的日期时间列中添加小时、分钟和秒?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算给定日期的剩余天数、小时数、分钟数和秒数?

如何设置 DateTime 小时、分钟和秒?

熊猫时间增量只有小时分钟和秒

Presto SQL / Athena:如何从“间隔天到秒”只返回小时、分钟和秒

消除SQL ORACLE中日期的小时,分 钟和秒

在 ZonedDateTime 或 Instant 中将小时分钟和秒设置为 00