SQL Server中Varchar转Datetime报错(格式为hh:mm:AM/PM)如何解决?
解决SQL Server中'hh:mm:AM/PM'格式字符串转datetime失败的问题
你遇到的错误根源是SQL Server无法直接识别hh:mm:AM/PM这种格式的字符串——标准时间格式里,分钟与AM/PM标识之间不存在冒号。解决思路是先修正字符串格式,再执行转换操作。
核心解决方案
先替换掉分钟和AM/PM之间的冒号,将hh:mm:AM转为hh:mm AM(同理处理PM格式),再进行类型转换:
基础转换语句
SELECT CAST( REPLACE(REPLACE([open], ':AM', ' AM'), ':PM', ' PM') AS DATETIME) AS [open_time] FROM [dbo].[museum_hours]
兼容无效数据的版本
如果列中存在格式不规范的记录,用TRY_CAST替代CAST,会返回NULL而非直接抛出错误,便于排查无效数据:
SELECT TRY_CAST( REPLACE(REPLACE([open], ':AM', ' AM'), ':PM', ' PM') AS DATETIME) AS [open_time] FROM [dbo].[museum_hours]
另一种可选方法(PARSE函数)
若服务器语言环境为英语,也可使用PARSE函数配合格式修正完成转换:
SELECT PARSE( REPLACE(REPLACE([open], ':AM', ' AM'), ':PM', ' PM') AS DATETIME USING 'en-US') AS [open_time] FROM [dbo].[museum_hours]
内容的提问来源于stack exchange,提问作者Duy Phan
相关产品推荐
相关产品推荐

