如何在 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 中的日期时间列中添加小时、分钟和秒?的主要内容,如果未能解决你的问题,请参考以下文章