pad () выберите, чтобы показать 2 символа

0

У меня есть рабочий оператор 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.

Любые мысли оценили.

С уважением Ральф

  • 1
    Почему вы пытаетесь выполнить работу уровня представления внутри SQL-запроса? Не. получить длительность, как есть, из базы данных и отформатировать ее на уровне представления.
  • 0
    Спасибо, хотя я пытался избежать необходимости делать ac: set, затем fmt: и, наконец, c: out, разве есть более простой способ?
Показать ещё 2 комментария
Теги:
jsp
datetime
jdbc
time

1 ответ

0

Это задание для 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 через каждую неделю в течение месяца или около того. Знание доступных функций облегчает вашу работу.

  • 0
    Спасибо, О Джонс, хотя см. Мой другой пост о попытках затем CONCAT или CONCAT_WS, который всегда выдает NULL и SEC_TO_TIME, который ограничен 838 часами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню