长度将是动态的,我想在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中是否有任何内置功能可以实现这一目标?
先谢谢amigos。
答案 0 :(得分:3)
我没有得到你的例子,但我认为你想要的是传递-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
如果您正在寻找之前之前的字符串部分,直到指针,并且不从指针到字符串的末尾,可以使用:
SET @FULL_STRING = 'this_is_something_here';
SELECT LEFT(@FULL_STRING, LENGTH(@FULL_STRING) - LOCATE('_', REVERSE(@FULL_STRING)));
-- Returns this_is_something
请注意,第二个声明不 strrchr
的作用。
答案 1 :(得分:2)
select reverse(substr(reverse('this_is_something_here'), 1+locate('_', reverse('this_is_something_here'))));
答案 2 :(得分:2)
使用反向,定位,然后直接替换而不使用长度
Set @str = 'there_is_something';
Select replace(@str,right(@str,locate('_',reverse(@str))),'');
答案 3 :(得分:1)
你可以写这样的查询
SELECT SUBSTRING_INDEX('and_this_may_go_like_this_too','_',(LENGTH('and_this_may_go_like_this_too')-LENGTH(REPLACE('and_this_may_go_like_this_too' ,'_',''))) - 1);