我已经研究了Cast和Convert,但是我找不到解决方法。我需要将四位数转换为小时格式。例如,0800将变为8:00或1530将变为15:30。我无法使用函数,而是使用InterSystem的CacheSQL。有什么建议么?预先感谢!
编辑:如果方便的话,我可以将四位数除以100,以得到原始1500中的15或0830中的8.30之类的值。这是否使转换为hour:minute格式更容易?
对于CacheSQL,您可以这样做:
SELECT {fn TRIM(LEADING '0' FROM LEFT(col_name, 2) || ':' || RIGHT(col_name, 2)) }
FROM table_name
在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
您将获得1900年1月1日的datetime
值,并带有所需的时间。
好吧,如果它类似于Oracle,则可以尝试使用to_date()
函数。
阅读更多here。
示例:
SELECT to_date(yourColumn, 'HH24MI') FROM ...
EDIT(为什么?请参见注释):如有必要(我实际上并不熟悉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。
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 )