如何将小时、分钟和秒添加到 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;
也就是用半开区间代替全闭区间
我的 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;
也就是用半开区间代替全闭区间