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

问题描述

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

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

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

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

提前致谢

解决方法

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

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

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

select UpdatedTime + '23:59:59'
,

您可以按如下方式使用 DATEADD() 函数(为清楚起见,请检查 SQL Fiddle):

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

输出:

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

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

DECLARE @dt DATETIME = '2021-12-31 00:00:00.000'
SELECT DATETIMEFROMPARTS(
    DATEPART(YEAR,@dt),DATEPART(MONTH,DATEPART(DAY,/* 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;

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