SQL CONVERT函数无法转换日期,查询报错求助
问题与解决方案
问题描述
执行以下SQL查询时出现错误:
select * from transactions where CONVERT(DATE, vdate, 103) BETWEEN '2013-01-01' AND '2013-12-31';
错误截图:
表结构截图:
尝试使用CAST函数也未解决问题。
补充限制
- 无法将
vdate字段改为date类型,需导入旧系统10万+条数据,现有日期格式不兼容; - 使用格式参数103是参考SQL Server CONVERT函数文档;
- CONVERT语法参考自Stack Overflow相关问题。
解决方案
- 避免转换报错,返回有效数据
用TRY_CONVERT替代CONVERT,该函数在转换失败时返回NULL,不会终止查询:
select * from transactions where TRY_CONVERT(DATE, vdate, 103) BETWEEN '2013-01-01' AND '2013-12-31';
- 排查无效日期数据
如果需要找出vdate字段中不符合dd/mm/yyyy格式(对应参数103)的无效数据,执行:
select vdate from transactions where TRY_CONVERT(DATE, vdate, 103) IS NULL;
- 确认日期格式匹配
检查vdate的实际格式是否为dd/mm/yyyy,如果是mm/dd/yyyy格式,需将转换参数改为101:
select * from transactions where TRY_CONVERT(DATE, vdate, 101) BETWEEN '2013-01-01' AND '2013-12-31';
内容的提问来源于stack exchange,提问作者Ehtesham ali
相关产品推荐
相关产品推荐

