从日期时间有效提取时间(十进制或日期时间)

时间:2012-08-17 20:56:09

标签: sql datetime sql-server-2000

我能够找到很多信息,用于从this one等日期时间列中获取时间的字符串表示。

我需要从日期时间中获取时间部分,以便我可以对其进行一些数学计算,例如将其添加到另一个日期时间。所以时间的字符串表示不会帮助我。

但是我只发现一个example将时间提取为数字类型值。即:

SELECT CAST(GETDATE() AS FLOAT) - FLOOR(CAST(GETDATE() AS FLOAT))

此方法需要两个强制转换,但我必须在超过10,000行上运行它。有没有类似于dateadd方法从日期时间列中提取日期部分,即:

select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

我可以用来获取datetime列的时间并将其作为小数或日期时间返回?也许是一种使用较少铸造的解决方案?

我正在使用SQL Server 2000。

2 个答案:

答案 0 :(得分:1)

一种方法您可以在几秒钟内获得时间:

select cast(datediff(second, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), getdate())/(60*60*24.0) as datetime)

以秒为单位计算时间,然后转换回日期时间。

以小数形式得到它:

select datediff(second, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), getdate())/(60*60*24.0)

如果您更喜欢毫秒精度,请使用“ms”。

或者,您可以使用更具可读性的内容:

select datepart(hh, getdate())/24.0+datepart(mm, getdate())/(24*60.0)+
       datepart(ss, getdate())/(24*60*60.0)

答案 1 :(得分:1)

获得datetime

SELECT GetDate() - DateDiff(day, 0, GetDate());
-- returns the time with zero as the datetime part (1900-01-01).

并获得一个代表时间的数字:

SELECT DateDiff(millisecond, DateDiff(day, 0, GetDate()), GetDate());
-- time since midnight in milliseconds, use as you wish

如果你真的想要一个字符串,那么:

SELECT Convert(varchar(8), GetDate(), 108); -- 'hh:mm:ss'
SELECT Convert(varchar(12), GetDate(), 114); -- 'hh:mm:ss.nnn' where nnn is milliseconds