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

Sql 仅从日期时间字段提取日期和小时,sql,sql-server,tsql,sql-server-2008-r2,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

我正在运行
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

您可以使用
DATEADD
DATEDIFF

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

工作原理:

  • 1970-01-01
  • 除以3600(整数除法,因此小数点后的部分将被跳过)
  • 乘以3600将值恢复为完整小时数
  • 将计算的秒数添加到
    1970-01-01

  • 使用
    SQL Server 2012+
    最简单的方法是使用:


    您可以使用
    DATEADD
    DATEDIFF

    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
    

    工作原理:

  • 1970-01-01
  • 除以3600(整数除法,因此小数点后的部分将被跳过)
  • 乘以3600将值恢复为完整小时数
  • 将计算的秒数添加到
    1970-01-01

  • 使用
    SQL Server 2012+
    最简单的方法是使用:


    为什么要除以3600*3600?@FartStopper添加了解释为什么要除以3600*3600?@FartStopper添加了解释