案件条件问题

时间:2016-04-13 17:23:30

标签: sql tsql substring case

我正在尝试创建一个案例条件,它根据条件删除字符串中的最后一个字符。

ON im.LegacyItem =
CASE
When
right(tr.item,4) = '_old' then left(tr.item,len(tr.item)-4)
when 
tr.item <> im.legacyitem then left(tr.item,len(tr.item) -2)     
else tr.item
end 
AND im.Location=loc.LocationNo

我收到了以下错误。

  

Msg 537,Level 16,State 3,Line 1   传递给LEFT或SUBSTRING函数的长度参数无效。

但是当我只使用right(tr.item,4) = '_old' then left(tr.item,len(tr.item)-4)

我没有问题。

但是,当我使用

when  tr.item <> im.legacyitem then left(tr.item,len(tr.item) -2) 

然后我收到上面的错误

我做错了什么?

1 个答案:

答案 0 :(得分:1)

此结果可能是因为该值小于2个字符。 您可以使用以下命令查找是否有任何短于2的值:

SELECT tr.item WHERE len(tr.item) <= 2 FROM 'your source'

您还可以在投射前检查长度:

((len(tr.item) >= 2) AND (tr.item <> 'NotEqual')) then left(tr.item,len(tr.item) -2)

或在现有的两个之前添加另一个'when'子句。

如果有效,请告诉我