设置日期时间变量的时间部分

新手上路,请多包涵

我正在处理一个将成为自动化工作的查询。它需要找到最后一天晚上 8 点到晚上 8 点之间的所有交易。我正在考虑做这样的事情

DECLARE @start_date DATETIME
DECLARE @end_date DATETIME

SET @start_date = DATEADD(DAY, -2, GETDATE())
SET @end_date = DATEADD(DAY, -1, GETDATE())

对于自动查询,这很适合找出日期部分。但是变量的 TIME 部分是查询执行的当前时间。有没有一种快速简单的方法将两个变量的时间部分硬编码为晚上 8:00?

原文由 NA Slacker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答
DECLARE @start_date DATETIME
DECLARE @end_date DATETIME

SET @start_date = DATEADD(hour, 20, DATEDIFF(DAY, 2, GETDATE()))
SET @end_date = @start_date + 1

select @start_date, @end_date

原文由 RichardTheKiwi 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果只是更新日期时间的特定部分,您可以使用 SMALLDATETIMEFROMPARTS 像:

 UPDATE MyTable
SET MyDate = SMALLDATETIMEFROMPARTS(YEAR(MyDate), MONTH(MyDate), DAY(MyDate), <HoursValue>, <MinutesValue>)

在其他情况下,可能需要将部分日期时间复制到其他或仅更新日期时间的某些部分:

 UPDATE MyTable
SET MyDate = SMALLDATETIMEFROMPARTS(YEAR(MyDate), MONTH(MyDate), DAY(MyDate), DATEPART(hour, MyDate), DATEPART(minute, MyDate))

有关更多此类功能,请参阅 SQL Server 日期/时间相关 API 参考

原文由 Nabster 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进