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

ответ

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

Спасибо, Барранка, это трюк - отлично. –

+0

Привет Барранка, первый раз, когда я использовал этот сайт, не знаю, как голосовать и благодарить вас и Эдпера, и Барранку. –

+0

Примите его ответ. Его ответ, по общему признанию, намного лучше и эффективнее моего. Бог благословил. – Edper

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, однако не мог полностью понять его использование, это объясняет это - спасибо. –

+0

К сожалению, слишком рано, все, что возвращается, - 00:00 или 30:00, чередуя каждый второй ряд? –

+0

Проверьте мое обновление. – Edper

Смежные вопросы