2014-09-05 56 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