使用left()函数时,SQL CASE失败

时间:2014-06-03 15:49:49

标签: sql sql-server

我有这个SQL CASE语句,它检查了一个值是否包含逗号,然后在其上执行leftcharindex函数。

但是查询失败了,因为它看起来仍然在尝试执行left()函数。

select 
   case 
      when '12560' like '%,%' 
        then left('12560',charindex(',', '12560', 0) - 1) 
        else '12560'  
   end

我基本上可能会或可能不会在参数中使用逗号,因此可能会也可能不会在其上留下一个逗号。

这可以在一个案例陈述中完成吗?如果不是,我将不得不用IF语句编写函数来执行此操作。

错误是:

  

Msg 536,Level 16,State 1,Line 1
  传递给左侧函数的长度参数无效。

由于

1 个答案:

答案 0 :(得分:2)

您可以在ISNULL()附近添加CHARINDEX声明。

示例:

select 
   case 
      when '12560' like '%,%' 
        then left('12560',ISNULL(charindex(',', '12560', 0),1) - 1) 
        else '12560'  
   end

SQLFiddle with demo

修改

为了完整起见,你可以将它包装在变量中并获得相同的结果(没有ISNULL),这是由于Alex在评论中提到的常量折叠

DECLARE @str VARCHAR(5) = '12560'
select 
   case 
      when @str like '%,%' 
        then left(@str,charindex(',', @str, 0) - 1) 
        else @str 
   end