从SQL Server中的varchar列将文本列值(12小时)转换为24小时

时间:2017-03-28 08:20:09

标签: sql-server database

在我现有的SQL Server数据库中,有一个这样的列:

  • 列名称和类型:meeting_time varchar(22)
  • 02:30:PM / 2:30:PM / 14:00:AM / 10:00:00:AM / 9:2:PM
  • 等不同格式存储的值

我正在做与移民相关的工作。在现有数据库中存储了这种值。我想将它们转换为24小时格式。

当我尝试使用IIF组合的stuff命令时。它继续增加,我不知道最新的数据库有其他值。从现有应用程序开始,用户可以输入值并将其存储在数据库中。

有人可以帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

首先,您必须将存储在meeting_time列中的值转换为有效的时间格式。示例 02:30:PM 02:30 PM 10:00:00:AM 10:00:00 AM 。我想你可以用

CAST(REPLACE(REPLACE(meeting_time, ':AM', ' AM'), ':PM', ' PM') AS TIME)

然后将其转换为TIME数据类型

CONVERT(varchar(22), CAST(REPLACE(REPLACE(meeting_time, ':AM', ' AM'), ':PM', ' PM') AS TIME), 108)

然后将转换后的时间格式化为您想要的格式(CONWERT函数中的值 108 指定24小时时间格式)

 CONVERT(varchar(22),
        IIF(TRY_CAST(REPLACE(REPLACE(meeting_time, ':AM', ' AM'), ':PM', ' PM') AS TIME) IS NULL, 
            TRY_CAST(REPLACE(REPLACE(meeting_time, ':AM', ''), ':PM', '') AS TIME),
            CAST(REPLACE(REPLACE(meeting_time, ':AM', ' AM'), ':PM', ' PM') AS TIME)) 
      , 108)

如果您正在使用MS SQL Server 2012(或更新版本)并且您还想尝试转换无效值,那么我们可以使用TRY_CAST而不是CAST

{{1}}