使用left()函数时SQL CASE失败
我有一个SQL使用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
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)