【问题标题】:SQL Server 2005 i want to create the hour a task was started out of an datetimeSQL Server 2005 我想创建一个任务从日期时间开始的小时
【发布时间】:2011-09-27 13:20:53
【问题描述】:

在 SQL Server 2005 上,我想创建一个表示我的任务开始时间的表示。我的日期时间是“2010-10-01 12:30:00.000”,这是实际的开始时间。我想结束的是“12:00”,这是任务开始的时间。关于如何减少“30”分钟的任何好主意?

【问题讨论】:

  • 您想要12:00(作为字符串)还是2010-10-01T12:00:00(仍然作为日期时间值)?
  • 我需要将其保留为日期时间值,以便我可以在“介于”子句中使用它

标签: sql-server-2005 datetime datepart


【解决方案1】:
declare @dt datetime 
set @dt = '2010-10-01 12:30:00.000'
select convert(char(5), dateadd(hour, datediff(hour, 0, @dt), 0), 108)

结果:

12:00

作为日期时间

declare @dt datetime 
set @dt = '2010-10-01 12:30:00.000'
select dateadd(hour, datediff(hour, 0, @dt), 0)

结果:

2010-10-01 12:00:00.000

【讨论】:

  • 这正是我需要的(作为日期时间)。无论如何,我只能获取时间并将其保留为日期时间?
  • @Peter - 日期时间总是有日期部分。如果您需要比较不同日期的时间,您可以在比较之前将值修改为具有相同的日期部分。
  • 我在比较之前将输入更改为字符串值,它运行良好,感谢您的帮助
【解决方案2】:

如果您只是想从日期时间值中删除分钟/秒/毫秒,但将其保留为日期时间,请使用 DATEADD/DATEDIFF

select DATEADD(hour,DATEDIFF(hour,0,`2010-10-01T12:30:00`),0)

这将返回2010-10-01T12:00:00

【讨论】:

  • SQL Server before 2008 中唯一与日期时间相关的日期类型是 datetime。这总是同时具有日期和时间组件,即使您没有在用于初始化它的字符串文字中指定它们。如果您只想比较两个日期时间的小时部分,忽略两个日期并忽略分钟,只需使用 DATEPART(hour,<value>) 并比较整数。
  • 嗨,Damien,我听从了你和 Mikael 的建议,只是更改了输入日期,以便我只能比较时间(小时)。非常感谢您在这方面的帮助。一切都很好
【解决方案3】:

这会做你想做的事:

SELECT DATEADD(hh, DATEDIFF(hh, '20000101', [DateField]), '20000101')

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 2011-09-06
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多