У меня есть рабочий оператор select
MySQL, который возвращает days
, hours
, mins
, secs
от продолжительности, которая находится в секундах -
SELECT Name, Zone, Duration,
FLOOR(Duration/60/60/24) as days,
FLOOR(Duration/60/60)%24 as hours,
FLOOR(Duration/60)%60 as mins,
Duration%60 as secs
from duration
Я бы хотел, чтобы каждый столбец имел 2 символа, поэтому все данные являются inline
поэтому нужно каким-то образом наложить любой одиночный символ на нуль (т.е. Если число дней равно 1, тогда pad/format, так что дни составляют 01)
Я попробовал pad() -
PAD(FLOOR(Duration/60/60/24),2,0) as days
но это приводит к NULL.
Любые мысли оценили.
С уважением Ральф
Это задание для SEC_TO_TIME()
и SUBSTR()
. Чтобы получить 01:02:03
используйте SEC_TO_TIME(3723)
.
Для получения нулевых чисел для HH, MM, SS выполните следующее:
SELECT SUBSTR(SEC_TO_TIME(3723),1,2) HH,
SUBSTR(SEC_TO_TIME(3723),4,2) MM,
SUBSTR(SEC_TO_TIME(3723),7,2) SS
Если у вас есть целое число, скажем 7
, и вы хотите текстовую строку 07
, вы можете использовать LPAD()
:
SELECT LPAD(7,2,'0')
Советы профессионала: использование типов данных TIME
, DATE
, TIMESTAMP
и/или DATETIME
в ваших таблицах - действительно хорошая практика, поскольку позволяет вам развернуть всю арифметику даты, предлагаемую MySQL. JDBC предлагает чистые преобразования из этих типов данных на стороне базы данных в типы данных Java, что делает их манипуляции практически без изменений из базы данных в программу.
Pro tip: Прочитайте эти две страницы справочника MySQL MySQL через каждую неделю в течение месяца или около того. Знание доступных функций облегчает вашу работу.