SQL Server如何将yyyy-MM-ddTHH:mm格式自定义时间字符串转datetime?
SQL Server 内置的CONVERT函数不支持传入自定义格式串,仅支持使用预设的格式码,你遇到报错的原因是:格式码126对应的ISO 8601格式要求时间部分必须完整到秒(格式为HH:mm:ss[.mmm]),你传入的字符串仅到分钟维度,缺少秒位因此触发转换失败。
你可以通过以下两种方案完成转换:
方案1:兼容全版本SQL Server的补位转换
直接给原始字符串补全秒位:00,即可适配126格式码的要求,该方案性能最优:
DECLARE @Test DATETIME2 = CONVERT(DATETIME2, '2022-08-19T20:25' + ':00', 126)
方案2:SQL Server 2012及以上版本的自定义解析
如果需要更灵活的自定义格式匹配,可以使用PARSE/TRY_PARSE函数完成解析,不需要手动补位:
-- 直接解析符合格式的字符串 DECLARE @Test DATETIME2 = PARSE('2022-08-19T20:25' AS DATETIME2) -- 用TRY_PARSE避免非法输入导致整段SQL报错,非法输入会返回NULL DECLARE @TestSafe DATETIME2 = TRY_PARSE('2022-08-19T20:25' AS DATETIME2)
内容的提问来源于stack exchange,提问作者mb1231
相关产品推荐
相关产品推荐

