SQL里那个查找字符串位置的CHARINDEX函数到底咋用啊
- 问答
- 2026-01-24 21:34:47
- 2
关于SQL中查找字符串位置的CHARINDEX函数的使用方法,以下内容综合整理了微软官方文档(Microsoft Docs)及常见数据库教程中的说明,直接提供如下:
CHARINDEX函数的主要作用是在一个字符串中查找另一个字符串首次出现的位置,如果找到了就返回该位置(从1开始计数),如果没找到则返回0,这个函数在SQL Server和Azure SQL数据库里是常用的,其他数据库系统可能有类似但名称不同的函数,比如MySQL的LOCATE或INSTR,但这里我们只谈CHARINDEX。
它的基本写法是这样的:CHARINDEX( 你要找的字符串 , 你在哪个大字符串里找 [, 你从哪个位置开始找] ),前两个参数是必须的,第三个参数是可选的,如果不写第三个参数,默认就从目标字符串的第一个字符开始找。
举个例子,假设我们有个字符串‘Hello, world!’,我们想找‘world’在里面哪里,你可以写:SELECT CHARINDEX('world', 'Hello, world!'),执行后,它会返回8,因为‘world’这个子串是从大字符串的第8个字符开始的(H是第1个,e是第2个,依此类推,空格也算一个字符)。

第三个参数可以让你指定搜索的起始位置。SELECT CHARINDEX('o', 'Hello, world!', 6),这个意思是从第6个字符之后开始找‘o’。‘Hello, world!’里第一个‘o’在第5位,但我们从第6位开始找,所以找到的就是第二个‘o’,也就是在‘world’里的那个,结果会返回9。
如果你要找的字符串不存在,比如SELECT CHARINDEX('SQL', 'Hello, world!'),那函数就会返回0,这个特性经常被用在WHERE条件里做判断,比如WHERE CHARINDEX('某关键词', 某字段) > 0,这相当于检查某字段是否包含‘某关键词’。
需要注意的是,CHARINDEX的查找是区分大小写的,也就是说,SELECT CHARINDEX('HELLO', 'Hello, world!')会返回0,因为大写的‘HELLO’和小写的‘Hello’对不上,这个行为实际上取决于你数据库的排序规则设置,如果你的数据库排序规则是不区分大小写的,那它可能就能找到,但通常默认情况下,在SQL Server的许多安装配置里,它是区分大小写的,如果你明确想不区分大小写地查找,一个常见的做法是先用UPPER或LOWER函数把字符串都转成大写或小写再查,比如SELECT CHARINDEX('HELLO', UPPER('Hello, world!')),这样就能返回1了。

这个函数在处理文本字段时非常有用,比如你有一个产品描述的表,你想找出所有描述中提到‘限量版’这个词的产品,你就可以写类似SELECT * FROM 产品表 WHERE CHARINDEX('限量版', 产品描述字段) > 0的查询,它比用LIKE操作符在某些场景下更灵活,因为你可以直接得到关键词出现的位置,而不仅仅是判断是否包含。
CHARINDEX经常和别的字符串函数一起搭配使用,比如SUBSTRING,比如说,你想从一个完整的文件路径里只提取出文件名,而文件名是从最后一个‘\’后面开始的,你可以先找到最后一个‘\’的位置,然后用SUBSTRING截取它后面的部分,找最后一个‘\’的位置可能需要一些技巧,因为CHARINDEX只找第一次出现的位置,一个常用的方法是结合REVERSE函数:先反转整个字符串,找到反转后‘\’第一次出现的位置,然后再用字符串长度换算一下,就能得到原字符串中最后一次出现的位置,具体写法可能像这样:SELECT LEN(路径字段) - CHARINDEX('\', REVERSE(路径字段)) + 1,这思路是:先反转字符串,找到‘\’在反转串里的位置,这个位置相当于原字符串中从末尾往前数的位置,然后用总长度减一下,就得到了在原串中从开头数的位置。
还要提醒一点,参数里的字符串可以是直接的文本(用单引号括起来),也可以是表中的字段名或者变量,比如SELECT CHARINDEX('-', 订单编号字段) FROM 订单表,这样就能查出每个订单编号中第一个短横线出现的位置。
CHARINDEX就是一个帮你定位子串的工具,你告诉它“找什么”、“在哪找”、以及“从哪开始找”(可选),它就会告诉你第一次发现这个子串的地方是第几个字符,如果找不到,它就返回0,记住它的返回值是从1开始的数字,不是从0开始,这一点和有些编程语言里的习惯不同,初学者容易搞错,如果你写程序时根据它的结果去截取字符串,要特别注意这个起始编号。
本文由帖慧艳于2026-01-24发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/85325.html
