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

时间:2015-04-06 15:28:03

标签: sql sql-server substring

我们有一个到目前为止一直在努力的存储过程。最近它已经开始失败,原因是:传递给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 

我正在尝试确定如何纠正这种情况,以便将来不会发生。

由于

1 个答案:

答案 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