Конвертировать четырехзначное число в часовой формат SQL

Я посмотрел в Cast и Convert, но я не могу найти способ сделать это. Мне нужно преобразовать четыре цифры в часовой формат. Например, 0800 станет 8:00 или 1530 станет 15:30. Я не могу использовать функции, я использую CacheSQL InterSystem. Какие-либо предложения? Заранее спасибо!

РЕДАКТИРОВАТЬ: Если это более удобно, я могу просто разделить четыре цифры на сто, чтобы получить значения, как 15 от оригинального 1500, или 8.30 от 0830. Это облегчает преобразование в формат часа: минуты?

3 ответа

Решение

Для CacheSQL вы можете сделать это:

SELECT {fn TRIM(LEADING '0' FROM LEFT(col_name, 2) || ':' || RIGHT(col_name, 2)) }
FROM table_name
left( case when (EndTime / 100) < 10 then  ('0'+ convert(varchar, EndTime / 100 )) else convert(varchar, EndTime / 100 )  end, 2 )
                 + ':'
                 + right( '0' + convert(varchar, EndTime % 100 ) , 2 )

Ну, если это что-то вроде Oracle, вы можете попробовать to_date() функция.

Узнайте больше здесь.

Пример:

SELECT to_date(yourColumn, 'HH24MI') FROM ...

РЕДАКТИРОВАТЬ (почему? См. Комментарии): При необходимости (я на самом деле не знаком с Oracle) вы можете обернуть вокруг него другую функцию, такую ​​как TIME().

SELECT TIME(to_date(yourColumn, 'HH24MI')) FROM ...

Узнайте больше о TIME() здесь.

</EDIT>

В MySQL эквивалентом будет STR_TO_DATE() функция:

SELECT STR_TO_DATE(yourColumn, '%H%i') FROM ...

Прочтите о STR_TO_DATE() и его параметрах в функции DATE_FORMAT().

В SQL Server 2008 приведены данные, которые выглядят как

create table #data
(
  HHMM int not null ,
)
insert #data values ( 0800 )
insert #data values ( 0815 )
insert #data values ( 1037 )
insert #data values ( 2359 )

Ты можешь сказать:

select * ,
       strTime = right( '0' + convert(varchar, HHMM / 100 ) , 2 )
               + ':'
               + right( '0' + convert(varchar, HHMM % 100 ) , 2 ) ,
       myTime  = convert(time ,
                   right( '0' + convert(varchar, HHMM / 100 ) , 2 )
                 + ':'
                 + right( '0' + convert(varchar, HHMM % 100 ) , 2 ) ,
                 120
                 )
from #data

Другие реализации SQL, вероятно, имеют аналогичную функциональность.

В более ранних версиях SQL Server, в которых отсутствует time тип данных, просто используйте datetime, таким образом:

select * ,
       strTime = right( '0' + convert(varchar, HHMM / 100 ) , 2 )
               + ':'
               + right( '0' + convert(varchar, HHMM % 100 ) , 2 ) ,
       myTime  = convert(datetime,
                   right( '0' + convert(varchar, HHMM / 100 ) , 2 )
                 + ':'
                 + right( '0' + convert(varchar, HHMM % 100 ) , 2 ) ,
                 120
                 )
from #data

Вы получите datetime значение 1 января 1900 года с желаемым временем суток.

Другие вопросы по тегам