我能够找到很多信息,用于从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。
答案 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