SQL Server中CHARINDEX查找拼接字符串返回0的问题咨询
问题分析与解决办法
哦,我一眼就发现问题所在了——你把CHARINDEX函数的参数顺序搞反啦!
核心问题:CHARINDEX的参数顺序搞反了
在SQL Server中,CHARINDEX的语法规则是:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
简单来说:
- 第一个参数是你要查找的目标字符串(比如你要找的
'12') - 第二个参数是要在其中搜索的源字符串(比如你拼接出来的
,12,)
你当前的语句是:
SELECT CHARINDEX(CONCAT(',',car,','),'12') AS carindex FROM drivers WHERE id=38
这相当于让SQL Server在'12'这个字符串里找,12,,显然找不到,所以返回0。
修正后的语句
把参数顺序调换过来就可以得到预期结果了:
SELECT CHARINDEX('12', CONCAT(',', car, ',')) AS carindex FROM drivers WHERE id=38;
执行这条语句后,返回值会是2(因为SQL Server的字符串索引从1开始计数,,12,里的'12'起始位置是第2位)。
另外补充一点:因为car是INT类型,你直接用12(不加单引号)也能正常工作,SQL Server会自动做隐式类型转换,不过推荐始终用单引号包裹字符串查找目标,这样语义更清晰,也能避免一些潜在的类型转换问题。
内容的提问来源于stack exchange,提问作者Ali Sheikhpour
相关产品推荐
相关产品推荐

