我们有一个到目前为止一直在努力的存储过程。最近它已经开始失败,原因是:传递给LEFT或SUBSTRING函数的长度参数无效
,case
when LEFT(MCTN.MCTN_NAME,2) = ' ' then SUBSTRING(MCTN.MCTN_NAME,3,LEN(MCTN.MCTN_NAME) - 2)
when ASCII(LEFT(MCTN.MCTN_NAME,1)) BETWEEN 32 AND 47 THEN SUBSTRING(MCTN.MCTN_NAME,2,LEN(MCTN.MCTN_NAME) - 1)
else MCTN.MCTN_NAME
end as MCTN_NAME
我正在尝试确定如何纠正这种情况,以便将来不会发生。
由于
答案 0 :(得分:0)
据推测,你有长度变为0的值,例如' '
或32到47之间的一个字符。
您可以通过向case
添加更多条件来解决此问题:
(case when MCTN.MCTN_NAME LIKE ' _%'
then SUBSTRING(MCTN.MCTN_NAME, 3, LEN(MCTN.MCTN_NAME) - 2)
when ASCII(LEFT(MCTN.MCTN_NAME, 1)) BETWEEN 32 AND 47 AND LEN(MCTN.MCTN_NAME) >= 2
then SUBSTRING(MCTN.MCTN_NAME, 2, LEN(MCTN.MCTN_NAME) - 1)
else MCTN.MCTN_NAME
end) as MCTN_NAME