最近在折腾数据库,遇到一个需求,要找某个字符串在另一个字符串里头一次出现的位置。我就开始琢磨,咋弄?一开始还真有点懵,毕竟平时 அதிகம்用的是那些个 CRUD,这种字符串操作还真不常搞。
然后我就去网上搜,看看有没有现成的函数能用。搜一圈,发现有个叫 INDEXOF 的函数,看着挺像那么回事。但仔细一瞧,不同的数据库,这玩意儿还不一样!有的数据库压根就没这函数,有的数据库虽然有,但名字可能还不一样,用法也可能有点区别。
先试试 MySQL
我本地装个 MySQL,就先拿它试试手。结果发现,MySQL 里头好像没有直接叫 INDEXOF 的函数。不过有个叫 LOCATE 的函数,功能差不多,都能找到字符串的位置。我就试试:
SELECT LOCATE('world', 'hello world');
运行结果是 7,还真找到!这说明 'world' 在 'hello world' 里头第一次出现的位置是第 7 个字符。
再试试 SQL Server
后来我又想,我这项目以后可能要部署到 SQL Server 上,得看看 SQL Server 咋弄。一查,SQL Server 里头有个叫 CHARINDEX 的函数,也能干这事。于是我又写段代码:
SELECT CHARINDEX('world', 'hello world');
运行结果也是 7,看来这俩函数用法差不多,都能实现我要的功能。
PostgreSQL ?
再我又试试 PostgreSQL,发现它既没有 INDEXOF,也没有 LOCATE 或 CHARINDEX。不过它有个叫 POSITION 的函数,也能实现类似的功能。试下:
SELECT POSITION('world' IN 'hello world');
结果还是 7,看来这几个数据库虽然函数名字不一样,但都能找到字符串的位置。
总结一下
经过这一番折腾,算是把这个需求搞定。总结下来就是:
- 不同的数据库,查找字符串位置的函数可能不一样。
- MySQL 里头可以用 LOCATE。
- SQL Server 里头可以用 CHARINDEX。
- PostgreSQL 里头可以用 POSITION。
以后再遇到类似的需求,我就知道该咋办,直接根据不同的数据库,选择对应的函数就行!这回实践也让我明白一个道理,遇到问题别慌,多查查资料,总能找到解决办法的。