0

我有一个日期时间类型的列。日期部分始终为 1899-12-30。我对时间部分很感兴趣。

这里有些例子:

Original field data:          Desired return value:
1899-12-30 07:45:00.000       7,75 or 7,45
1899-12-30 13:00:00.000       1 or 13 
1899-12-30 08:00:00.000       8
1899-12-30 13:30:00.000       13,5 or 13,30
1899-12-30 18:15:00.000       18,25  or 18,15    

获得所需输出的最佳方式是什么?

** 我使用的是 sql server 2005。

4

3 回答 3

1
select  1.0 * datepart(hour, yourDateColumn) + 0.01 * datepart(minute, yourDateColumn)
from    yourTable
于 2013-02-21T09:16:14.977 回答
0

询问:

SQLFIDDLE示例

SELECT t.dt,
       CAST(DATEPART(hour, t.dt) AS NVARCHAR(2)) +
       CASE WHEN DATEPART(minute, t.dt) = 0 THEN ''
       ELSE ',' END + 
       CASE WHEN DATEPART(minute, t.dt) = 0 THEN ''
       ELSE CAST(DATEPART(minute, t.dt) AS NVARCHAR(2)) END AS rr
FROM Table1 t

结果:

|                              DT |    RR |
-------------------------------------------
| December, 30 1899 07:45:00+0000 |  7,45 |
| December, 30 1899 13:00:00+0000 |    13 |
| December, 30 1899 08:00:00+0000 |     8 |
| December, 30 1899 13:30:00+0000 | 13,30 |
| December, 30 1899 18:15:00+0000 | 18,15 |
于 2013-03-27T09:17:39.777 回答
0

一种选择是用于DATEDIFF查找自 1899 年 12 月 31 日午夜以来的毫秒数,然后除以一小时内的毫秒数:

SELECT DATEDIFF("ms", ColumnName, '1899-12-31 00:00:00') / 3600000.0 FROM Foo

或者,如果您的数据仅精确到最接近的秒数:

SELECT DATEDIFF("s", ColumnName, '1899-12-31 00:00:00') / 3600.0 FROM Foo
于 2013-02-21T09:18:49.200 回答