2013-02-21 80 views
0

我有一個類型爲datetime的列。 datepart始終爲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的

+0

出於興趣,爲什麼你使用'datetime'領域只是時間數據?爲什麼不使用'時間'字段? – 2013-02-21 09:16:36

+0

我的應用程序只接受浮動。 – Amedo 2013-02-21 10:42:23

+0

我並沒有問你的應用程序 - 我在問數據庫模式。如果每個值的日期相同,則只需要一個「時間」字段,而不是「日期時間」字段。 – 2013-02-21 10:42:55

回答

1
select 1.0 * datepart(hour, yourDateColumn) + 0.01 * datepart(minute, yourDateColumn) 
from yourTable 
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 
+0

我得到這個錯誤:轉換日期和/或時間從字符串轉換失敗。 – Amedo 2013-03-27 08:58:44

+0

@Amedo:哎呀。我在日期格式上失敗。現在試試 :) – 2013-03-27 09:03:33

0

查詢:

SQLFIDDLEExample

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 | 
相關問題