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

使用left()函数时SQL CASE失败,sql,sql-server,Sql,Sql Server,我有一个SQLCASE语句,它检查一个值是否包含逗号,然后对其执行left和charindex函数 select case when '12560' like '%,%' then left('12560',charindex(',', '12560', 0) - 1) else '12560' end 但是,查询失败,因为它看起来仍在尝试对其执行left()函数 select case when '12

我有一个SQL
CASE
语句,它检查一个值是否包含逗号,然后对其执行
left
charindex
函数

select 
   case 
      when '12560' like '%,%' 
        then left('12560',charindex(',', '12560', 0) - 1) 
        else '12560'  
   end
但是,查询失败,因为它看起来仍在尝试对其执行
left()
函数

select 
   case 
      when '12560' like '%,%' 
        then left('12560',charindex(',', '12560', 0) - 1) 
        else '12560'  
   end
我基本上可能在参数中有逗号,也可能没有逗号,因此可能不想在参数上做左撇

这可以在一个案例陈述中完成吗?如果不是,我将不得不编写函数,用If语句来实现这一点

错误是:

味精536,第16级,状态1,第1行
传递给left函数的长度参数无效


谢谢

您可以在
CHARINDEX
周围添加
ISNULL()
语句

例如:

选择
案例
当“12560”与“%”、%类似时
然后左('12560',ISNULL(charindex(',','12560',0),1)-1)
其他‘12560’
结束

编辑

为了完整性起见,您可以将其包装在一个变量中,并获得相同的结果(没有ISNULL),因为Alex在注释中提到了常数折叠:

DECLARE@str VARCHAR(5)='12560'
挑选
案例
当@str与“%”、%相似时
然后向左(@str,charindex(',',@str,0)-1)
else@str
结束

'12560'
一列还是一个字符串?。。。因为常量表达式
charindex(',','12560',0)
在批处理程序
charindex(',','12560',0)