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

How to add hours, minutes and seconds to a datetime column in SQL?

我的 table "UpdatedTime"

中有以下日期时间列

示例值:2021-12-31 00:00:00.000

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

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

提前致谢

您可以按如下方式使用 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

我会使用 dateadd(),但我会把它表述为:

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

或者只添加一个时间值:

select UpdatedTime + '23:59:59'

假设您使用的是足够现代的 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;

也就是用半开区间代替全闭区间