0

我已经能够找到很多信息,用于从像这样的 datetime 列中获取时间的字符串表示形式。

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

但是,我只找到了一个将时间提取为数字类型值的示例。IE:

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

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

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

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

我正在使用 SQL Server 2000。

4

2 回答 2

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)
于 2012-08-17T21:01:42.463 回答
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
于 2012-08-17T21:07:59.243 回答