我有一个较旧的数据库,该数据库将日期和时间存储在两个不同的列中,这在这种情况下很好,但是在时间列中,我有一个整数,它似乎代表该条目的起源时间。
例如:
Embedding
将是430
04:30 AM
将是9
00:09 AM
将是1350
SQL中是否可以将这些值转换为显示为1:50 PM
等?
答案 0 :(得分:0)
已更新
对不起,我的原始查询中存在一个错误:如果小时是12PM,则显示为0。此问题已在下面修复。
SELECT CONCAT( CAST((IIF(Tim < 1300, Tim, Tim % 1200)) / 100 AS nvarchar),
':',
IIF(Time_Col % 100 < 10,'0',''), -- this adds the '0' for mins less than 10
CAST( Time_Col % 100 AS nvarchar),
IIF(Time_Col > 1159,' PM',' AM'))
FROM Your_Table
此处的关键是使用整数除法和“模”运算符来解析时间值。请注意,它不会不执行任何错误检查,因此如果int
值的开头格式不正确,则会从此代码中获得错误的时间字符串。您可以轻松地添加一些错误检查(例如,测试大于59的分钟或大于23的小时)。
答案 1 :(得分:0)
我只想转换为time
:
select convert(time, dateadd(minute, (t / 100)* 60 + ( t % 100), 0))
from (values (125)) v(t)
如果您想将其转换为特定的字符串表示形式,则可以使用format()
或convert()
。
例如:
select format(dateadd(minute, (t / 100)* 60 + ( t % 100), 0), N'hh\:mm tt')