我有这个SQL CASE
语句,它检查了一个值是否包含逗号,然后在其上执行left
和charindex
函数。
但是查询失败了,因为它看起来仍然在尝试执行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
传递给左侧函数的长度参数无效。
由于
答案 0 :(得分:2)
您可以在ISNULL()
附近添加CHARINDEX
声明。
示例:
select
case
when '12560' like '%,%'
then left('12560',ISNULL(charindex(',', '12560', 0),1) - 1)
else '12560'
end
修改强>
为了完整起见,你可以将它包装在变量中并获得相同的结果(没有ISNULL),这是由于Alex在评论中提到的常量折叠:
DECLARE @str VARCHAR(5) = '12560'
select
case
when @str like '%,%'
then left(@str,charindex(',', @str, 0) - 1)
else @str
end