Oracle中的instr函数有四个参数,既某个字符串在另一个字符串中出现2次时所在的位置,时在mysql中有什么可以替代的
时间: 2024-03-27 12:37:13 浏览: 106
在MySQL中,如果要找到一个字符串在另一个字符串中第n次出现的位置,可以结合使用SUBSTRING_INDEX函数和CHAR_LENGTH函数,其语法为:
```
SELECT SUM(CHAR_LENGTH(SUBSTRING_INDEX(str, substr, n - 1))) + n - 1 AS position
FROM tbl
WHERE str LIKE CONCAT('%', substr, '%');
```
其中,str为要在其中查找的字符串,substr为要查找的字符串,n为要查找的子字符串在主字符串中第几次出现。这个查询语句会返回要查找的字符串在主字符串中第n次出现的位置。例如:
```
SELECT SUM(CHAR_LENGTH(SUBSTRING_INDEX('hello world hello', 'o', 2 - 1))) + 2 - 1 AS position; -- 返回8
```
这个查询语句会返回字符串'hello world hello'中第2次出现字符'o'的位置,即8。
相关问题
Oracle中的instr函数有四个参数,既某个字符串在另一个字符串中出现n次时所在的位置,时在mysql中有什么可以替代的
在MySQL中可以使用LOCATE函数来代替Oracle中的INSTR函数。LOCATE函数也可以找到一个字符串在另一个字符串中第一次出现的位置,其语法为:
```
LOCATE(substr,str,pos)
```
其中,substr为要查找的字符串,str为要在其中查找的字符串,pos为可选参数,表示从第pos个字符开始查找。如果找到,则返回该字符串在另一个字符串中的位置,否则返回0。例如:
```
SELECT LOCATE('world', 'hello world'); -- 返回7
SELECT LOCATE('world', 'hello world', 8); -- 返回0
```
Oracle中的instr函数有四个参数时在mysql中有什么可以替代的
在 MySQL 中,可以使用 `locate` 函数来替代 Oracle 中带有 4 个参数的 `instr` 函数。
`locate` 函数的语法如下:
```
locate(substr,str,pos)
```
其中,`substr` 为要查找的子字符串,`str` 为要在其中查找的字符串,`pos` 为要开始查找的位置。如果 `pos` 为 0 或者省略,则从字符串开头开始查找。
如果要在 MySQL 中模拟 Oracle 中 4 个参数的 `instr` 函数,可以使用以下公式:
```
SELECT CASE
WHEN LOCATE(substring, string, start) = 0 THEN 0
ELSE LOCATE(substring, string, start) + (start - 1)
END AS instr_result;
```
其中,`substring` 为要查找的子字符串,`string` 为要在其中查找的字符串,`start` 为要开始查找的位置。如果 `start` 为 0 或者省略,则从字符串开头开始查找。这个公式会返回类似于 Oracle 中 `instr` 函数的结果。
阅读全文