长度将是动态的,我想在 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。