在我现有的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命令时。它继续增加,我不知道最新的数据库有其他值。从现有应用程序开始,用户可以输入值并将其存储在数据库中。
有人可以帮助我吗?
提前致谢。
答案 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}}