2014-09-05 55 views
1

嗨,我有一個包含以下列的MySql表;將多個字段轉換爲DateTimeStamp

Year Month Day Time Temp 
------------------------ 
2014 12 30 23.5 15.9 
2014 12 31 00.0 13.2 
2014 12 31 00.5 11.5 

上面的數據是30分鐘(半小時記錄)。

Structure: 
---------- 
Year = int(4) 
Month = int(2) 
Day = int(2) 
Time = decimal(3,1) "decimal 24hrs" 
Temp = decimal(3,1) 

我需要查詢表返回;

Timestamp Date/Time and Temp;e.g. 
--------------------------------- 
2014-12-30 23:30:00 15.9 
2014-12-31 00:00:00 13.2 
2014-12-31 00:30:00 11.5 

我可以返回日期部分(和溫度),但無法轉換/包含時間。

我目前正在使用;

SELECT concat(`Year`,'-',`Month`,'-',`Day`) AS `MyDateTimeStamp`, `Temp` 
FROM `MyTable' 

我找遍了線索,找不到類似的例子。 謝謝你在前進, 問候 託尼

+0

爲什麼不試試'SEC_TO_TIME()'? (查看下面的答案) – Barranka 2014-09-06 00:11:49

回答

0

要轉換時間,請使用sec_to_time()。您需要將該時間轉換爲秒。

實施例:23.5相當於23:30:00,所以,23.5/24相當於天至該時間的分數。所以:(23.5/24) * 24 * 60 * 60 = 23.5 * 60 * 60是秒數。最後:

select sec_to_time(23.5 * 60 * 60); 
-- Result: 23:30:00 

因此,要獲得日期/時間:

select concat(concat_ws('-', `year`, `month`, `day`), ' ', sec_to_time(`time` * 60 * 60)); 
+0

謝謝Barranka,這是個絕招。 – 2014-09-06 00:18:19

+0

嗨Barranka,我第一次使用這個網站,不知道如何投票,謝謝Edper和Barranka。 – 2014-09-06 00:28:29

+0

接受他的回答。無可否認,他的答案比我的更好,更高效。上帝保佑。 – Edper 2014-09-06 00:33:28

0

嘗試使用IF()功能,可能FLOOR()功能,如:

SELECT concat(`Year`,'-',`Month`,'-',`Day`,' ', 
FLOOR(`Time`), IF((`Time`/FLOOR(`Time`))>1,' :30:00',' :00:00')) AS `MyDateTimeStamp`, `Temp` 
FROM `myTable` 

Demo

+0

令人難以置信的是,這是完美的,你是一個非常讚賞的傳說。 我嘗試過使用Floor,但無法完全理解它的用途,這解釋了它 - 謝謝。 – 2014-09-06 00:03:59

+0

哎呀說話太早,所有返回的信息都是每隔一行交替00:00或30:00? – 2014-09-06 00:09:37

+0

檢查我的更新。 – Edper 2014-09-06 00:10:30