SQL更改DATEADD数据类型

时间:2014-11-06 11:03:04

标签: sql sql-server

我正在尝试将时间列调整到四分之一,我搜索了论坛并找到了这个很好的代码:

 select dateadd(minute, datediff(minute, 0, GETDATE()) / 15 * 15, 0)

问题是这给了我作为时间戳列的时间,日期为1900-01-01,而我只想要这个时间。我找不到怎么做。

5 个答案:

答案 0 :(得分:1)

您没有指定正在使用的SQL Server版本。

自SQL Server 2008起,我们有时间数据类型(http://msdn.microsoft.com/en-us/library/bb677243(v=sql.100).aspx)。

SELECT DateAdd(mi, DateDiff(mi, 0, GetDate()) / 15 * 15, 0) As original_value
     , Convert(time, DateAdd(mi, DateDiff(mi, 0, GetDate()) / 15 * 15, 0)) As sql_2008_onwards
     , Convert(char(10), DateAdd(mi, DateDiff(mi, 0, GetDate()) / 15 * 15, 0), 108) As pre_sql_2008

使用最后一个选项,您的最终值仍然是一段文字。理想情况下,您应该将其重新转换为datetime值(Convert(datetime, <rest of code>)

答案 1 :(得分:0)

这对您有所帮助。

DECLARE @datetime datetime

SET @datetime = (select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0))

SELECT CAST(DATEPART(hour, @datetime) as varchar(2)) + 
':' +  CAST(DATEPART(minute, @datetime)as varchar(2))

答案 2 :(得分:0)

SELECT CONVERT(VARCHAR(10),
               dateadd(minute,
               datediff(minute,0,GETDATE()) / 15 * 15, 0),
               108)

答案 3 :(得分:0)

使用转换方法获取时间。

SELECT 
      CONVERT(VARCHAR(10), 
      dateadd(minute, 
      datediff(minute ,0,GETDATE()) / 15 * 15, 0), 
      108)
上述查询中的

108显示时间格式。您可以根据自己的要求进行更改。

您可以在此处了解详情:http://www.w3schools.com/sql/func_convert.asp

答案 4 :(得分:0)

这应该有效

SELECT CAST(DATEADD(minute,
       DATEDIFF(minute, 0, GETDATE()) / 15 * 15, 0) AS TIME(0));