【问题标题】:How to add hours, minutes and seconds to a datetime column in SQL?如何在 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 开始。

标签: sql sql-server datetime sqldatetime


【解决方案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;

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

【讨论】:

  • 是的,这确实是一个好点。我也应该考虑几分之一秒。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2016-07-10
  • 2016-01-07
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多