我有一个带有时间字段的表作为数据类型数字(6,0),它显示24小时格式,如100,150300,21000等。
这里100-> 00:01:00(上午12:01) 我写了这样的东西来存储为varchar以便在之前丢失0:
select
Right('000000'+ cast(FM_TIME as varchar(6)),6) FT_Time
from table;
现在如何将此字段转换为时间以使用AM或PM以12小时格式显示。
我们可以通过添加前导0来直接从数字转换为时间吗?
答案 0 :(得分:1)
如果可能的话,您应该将该列更新为时间数据类型而不是数字(6,0)。
这适用于您提供的示例数据。但请注意,您的表中可能有一些无效的值。
create table #Something
(
FM_TIME numeric(6,0)
)
insert #Something
select 100 union all
select 150300 union all
select 21000
select convert(varchar(15), convert(time, STUFF(STUFF(right(REPLICATE('0', 6) + CONVERT(varchar(6), FM_TIME), 6), 3, 0, ':'), 6, 0, ':')), 100)
from #Something
drop table #Something
答案 1 :(得分:0)
如果将此数据转换为SQL Server time
数据类型,则可以根据需要(在客户端中)显示该数据。
(应尽可能将数据类型的格式推送到客户端:客户端往往会更好!)
这是一个可以将6位数转换为time
值的表达式:
declare @timeNumber int = 235945
select convert(time,
convert(varchar(2), @timeNumber / 10000) +
':' +
convert(varchar(2), (@timeNumber % 10000) / 100) +
':' +
convert(varchar(2), @timeNumber % 100)
)
这将返回以下内容:
23:59:45.0000000
然后您可以根据需要对其进行格式化。
编辑添加:按请求,将上述表达式作为表中的查询添加:
假设字段名称FM_TIME
和表名MyTable
(因为您没有在示例中提供表名),并且您希望返回的列具有名称{ {1}}:
FT_TIME