MYSQL:查找字符串中最后一次出现的字符

Adi*_*hah 8 mysql string

长度将是动态的,我想在 MYSQL 中的字符串中最后一次出现字符之前找到数据

就像php 中的strrchr

要获得最后一次出现的 _(下划线),我需要传递长度。这是 3

mysql> SELECT SUBSTRING_INDEX ('this_is_something_here', '_', 3);

+------------------------------------------------- ---+
| SUBSTRING_INDEX ('this_is_something_here', '_', 3) |
+------------------------------------------------- ---+
| this_is_something |
+------------------------------------------------- ---+

在这里,要获得最后一次出现的 _(下划线),我需要传递长度。这是 6

 

mysql> SELECT SUBSTRING_INDEX ('and_this_may_go_like_this_too', '_', 6);
+------------------------------------------------- ----------+
| SUBSTRING_INDEX ('and_this_may_go_like_this_too', '_', 6) |
+------------------------------------------------- ----------+
| and_this_may_go_like_this |
+------------------------------------------------- ----------+

我想要上次出现 _ (下划线)之前的数据字符串,只是在上面的例子中显示,但没有传递长度。

注意:从上面的例子我想要“_here”和“_too”的数据之前

最后一次出现 _(下划线)

在 MySQL 中是否有任何内置功能可以实现这一点?

在此先感谢朋友们。

Alv*_*Teh 12

我不太明白你的例子,但我认为你想要的是传递 -1 作为长度并预先添加子字符串。

相比

strrchr('and_this_may_go_like_this_too', '_'); // Returns _too

SELECT SUBSTRING_INDEX('and_this_may_go_like_this_too', '_', -1);
-- Returns too, just need to concatenate `_` so...
SELECT CONCAT('_', SUBSTRING_INDEX('and_this_may_go_like_this_too', '_', -1));
-- Returns _too
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找针之前和针之前的字符串部分,而不是从针到弦的末端,您可以使用:

SET @FULL_STRING = 'this_is_something_here';  

SELECT LEFT(@FULL_STRING, LENGTH(@FULL_STRING) - LOCATE('_', REVERSE(@FULL_STRING)));
-- Returns this_is_something
Run Code Online (Sandbox Code Playgroud)

请注意,第二个语句不是什么strrchr