仅从日期时间字段提取日期和小时

时间:2015-12-30 15:59:17

标签: sql sql-server tsql sql-server-2008-r2

我正在运行SQL Server 2008并且我有一个datetime字段,在此字段中我只想提取日期和小时。我尝试使用datepart()进行解析,但我认为我做错了,因为当我试图将两者重新组合在一起时,我得到了一个数字值。我的尝试是

Select Datepart(YEAR, '12/30/2015 10:57:00.000') + 
       Datepart(HOUR, '12/30/2015 10:57:00.000')

返回的是2025我希望看到的是

12/30/2015 10:00:00.000

1 个答案:

答案 0 :(得分:4)

您可以使用DATEADDDATEDIFF

DECLARE @d DATETIME = '12/30/2015 10:57:00.000';

SELECT DATEADD(second,DATEDIFF(second,'1970-01-01',@d)/3600*3600 , '1970-01-01')
-- 2015-12-30 10:00:00

LiveDemo

工作原理:

  1. 1970-01-01
  2. 获得秒差异
  3. 除以3600(整数除法,以便跳过小数点后的部分)
  4. 乘以3600以获得值回到整个小时
  5. 将计算的秒数添加到1970-01-01
  6. 使用SQL Server 2012+,方法是使用DATETIMEFROMPARTS

    SELECT DATETIMEFROMPARTS(YEAR(@d), MONTH(@d), DAY(@d), DATEPART(HOUR, @d),0,0,0)
    

    LiveDemo2