将四位数转换为小时格式SQL

时间:2012-08-29 21:23:29

标签: sql casting intersystems-cache

我已经研究过Cast和Convert,但我找不到办法做到这一点。我需要将四位数转换为小时格式。例如,0800将变为8:00或1530变为15:30。我不能使用函数,我使用的是InterSystem的CacheSQL。有什么建议?提前谢谢!

编辑: 如果它更方便的话,我可以将四位数除以一百来得到原始1500的15或者0830的8.30这样的值。这会使转换为小时:分钟格式更容易吗?

4 个答案:

答案 0 :(得分:2)

对于CacheSQL,您可以这样做:

SELECT {fn TRIM(LEADING '0' FROM LEFT(col_name, 2) || ':' || RIGHT(col_name, 2)) }
FROM table_name

答案 1 :(得分:0)

好吧,如果它像Oracle一样,你可以试试to_date()函数。

了解更多here

示例:

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

编辑(为什么?看评论):如果有必要(我实际上不熟悉Oracle)你可以在它周围包装另一个函数,比如TIME()。

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

详细了解TIME() here

</EDIT>

在MySQL中,等效的是STR_TO_DATE()函数:

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

在DATE_FORMAT()函数下阅读STR_TO_DATE()及其parameters

答案 2 :(得分:0)

在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实现可能具有类似的功能。

在缺少time数据类型的早期版本的SQL Server中,只需使用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值,即1900年1月1日所需的时间。

答案 3 :(得分:0)

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 )