编写此查询以将小时添加到日期的最简洁方法

Posted

技术标签:

【中文标题】编写此查询以将小时添加到日期的最简洁方法【英文标题】:Most concise way to write this query to add hour to a date 【发布时间】:2012-01-18 18:28:50 【问题描述】:

我有一个带日期时间的字段。我想忽略该字段上的时间并添加指定的时间。

这是我正在寻找的示例,其中 @h 可以是 0 到 23 之间的任何值。(为了简单起见,我使用 getdate() 而不是表中的字段)。

declare @h int = 8
select cast(cast(cast(getdate() as date) as nvarchar(50)) + ' ' + CAST(@h as nvarchar(2)) + ':00' as datetime)

我怎样才能更简单地写这个?请记住,我对可读性/可维护性比这里的速度更感兴趣。

【问题讨论】:

SQL Server 的哪个版本? 2005 年还是 2008 年? 如果他使用DATE数据类型,则必须是2008年... 【参考方案1】:

SELECT DATEADD(hour, 1, CAST((CAST (GETDATE() as DATE)) as datetime))

您可以根据需要在此处放置一个参数来代替1

【讨论】:

Crazy... 我实际上首先尝试过(我想),但收到一个错误,听起来 DATEADD 不支持添加小时数。您的陈述显然有效,但 +1。 您必须在添加之前转换为DATETIMEDATE 数据类型不支持小时数。 啊。实际上我也尝试过,但是当我修复那个部分时,我的论点不正常并且忘记了再次投射。星期三基本上是我的星期一,所以我把它归咎于此。【参考方案2】:

这个怎么样?

declare @h int = 8
select dateadd(hh, @h, cast(cast(getdate() as date) as datetime))

【讨论】:

@JNK 嘿,也许他只是打字速度慢。我会给他怀疑的好处:)

以上是关于编写此查询以将小时添加到日期的最简洁方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使此查询也返回计数值为 0 的行?

如何编写查询以将两个帐户及其活动日志合并为一个? [关闭]

Android默认方法可以正确获取1天1小时的日期和时间

Max() 需要很长时间是不是有任何替代方法来编写此查询?

如何编写执行预定义查询以将数据加载到工作表中的办公脚本?

如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?