SQL Server:如何将int的值转换为hh:mm

时间:2019-08-14 19:25:24

标签: sql sql-server

我有一个较旧的数据库,该数据库将日期和时间存储在两个不同的列中,这在这种情况下很好,但是在时间列中,我有一个整数,它似乎代表该条目的起源时间。

例如:

  • Embedding将是430
  • 04:30 AM将是9
  • 00:09 AM将是1350

SQL中是否可以将这些值转换为显示为1:50 PM等?

2 个答案:

答案 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')