提取字符串左侧4位年份时遇类型转换错误,求解决方案
问题解决方法
报错根源
你写的LEFT(4, [DESCRIPTION])参数顺序搞反了。SQL的LEFT函数语法是LEFT(待截取字符串, 截取长度),你把长度放前面、字符串放后面,数据库会误以为要把[DESCRIPTION]这个字符串转换成数值类型作为截取长度,所以触发了转换错误。
直接解决办法
修正LEFT函数的参数顺序,直接提取前4位字符串:
LEFT([DESCRIPTION], 4) AS ModelYear
这样得到的结果是varchar类型的年份(比如'2015'),完全符合你不需要转成Int的需求,也不会触发转换错误。
额外建议(如果后续需要数值类型)
如果之后需要把年份转成数值类型,为了避免遇到非数字开头的字符串时报错,可以用TRY_CAST或TRY_CONVERT做安全转换:
TRY_CAST(LEFT([DESCRIPTION], 4) AS INT) AS ModelYear
转换失败时会返回NULL,不会中断查询。
关于关闭隐式转换
不建议关闭数据库的隐式转换,这会影响整个数据库的其他正常操作,而且你的问题本质是函数参数顺序错误,和隐式转换无关,修正参数即可解决问题。
内容的提问来源于stack exchange,提问作者craig.white
相关产品推荐
相关产品推荐

