Конвертировать четырехзначное число в часовой формат 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 года с желаемым временем суток.