传递给 LEFT 或 SUBSTRING 函数的长度无效

Invalid length passed to the LEFT or SUBSTRING function

到目前为止,我们有一个存储过程。最近由于以下原因开始失败:传递给 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,例如 ' ' 或 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