SQLIndexOf查找字符串位置,新手一看就会!

吉云

最近在折腾数据库,遇到一个需求,要找某个字符串在另一个字符串里头一次出现的位置。我就开始琢磨,咋弄?一开始还真有点懵,毕竟平时 அதிகம்用的是那些个 CRUD,这种字符串操作还真不常搞。

然后我就去网上搜,看看有没有现成的函数能用。搜一圈,发现有个叫 INDEXOF 的函数,看着挺像那么回事。但仔细一瞧,不同的数据库,这玩意儿还不一样!有的数据库压根就没这函数,有的数据库虽然有,但名字可能还不一样,用法也可能有点区别。

先试试 MySQL

SQLIndexOf查找字符串位置,新手一看就会!

我本地装个 MySQL,就先拿它试试手。结果发现,MySQL 里头好像没有直接叫 INDEXOF 的函数。不过有个叫 LOCATE 的函数,功能差不多,都能找到字符串的位置。我就试试:

SELECT LOCATE('world', 'hello world');

运行结果是 7,还真找到!这说明 'world' 在 'hello world' 里头第一次出现的位置是第 7 个字符。

再试试 SQL Server

SQLIndexOf查找字符串位置,新手一看就会!

后来我又想,我这项目以后可能要部署到 SQL Server 上,得看看 SQL Server 咋弄。一查,SQL Server 里头有个叫 CHARINDEX 的函数,也能干这事。于是我又写段代码:

SELECT CHARINDEX('world', 'hello world');

运行结果也是 7,看来这俩函数用法差不多,都能实现我要的功能。

PostgreSQL ?

SQLIndexOf查找字符串位置,新手一看就会!

再我又试试 PostgreSQL,发现它既没有 INDEXOF,也没有 LOCATECHARINDEX。不过它有个叫 POSITION 的函数,也能实现类似的功能。试下:

SELECT POSITION('world' IN 'hello world');

结果还是 7,看来这几个数据库虽然函数名字不一样,但都能找到字符串的位置。

总结一下

SQLIndexOf查找字符串位置,新手一看就会!

经过这一番折腾,算是把这个需求搞定。总结下来就是:

  • 不同的数据库,查找字符串位置的函数可能不一样。
  • MySQL 里头可以用 LOCATE
  • SQL Server 里头可以用 CHARINDEX
  • PostgreSQL 里头可以用 POSITION
  • SQLIndexOf查找字符串位置,新手一看就会!

以后再遇到类似的需求,我就知道该咋办,直接根据不同的数据库,选择对应的函数就行!这回实践也让我明白一个道理,遇到问题别慌,多查查资料,总能找到解决办法的。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]