我正在尝试将时间列调整到四分之一,我搜索了论坛并找到了这个很好的代码:
select dateadd(minute, datediff(minute, 0, GETDATE()) / 15 * 15, 0)
问题是这给了我作为时间戳列的时间,日期为1900-01-01,而我只想要这个时间。我找不到怎么做。
答案 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显示时间格式。您可以根据自己的要求进行更改。
答案 4 :(得分:0)
这应该有效
SELECT CAST(DATEADD(minute,
DATEDIFF(minute, 0, GETDATE()) / 15 * 15, 0) AS TIME(0));