我们可以使用INSTR()
函数在MySQL中找到给定子字符串第一次出现的索引,如下所示。
SELECT instr('Have_a_good_day', '_') AS index_position
字符串
它将显示5
,即指定子字符串的第一个匹配项,在本例中为下划线_
。
我需要获取给定字符(或子字符串)的最后一次出现,类似于String类的Java lastIndexOf(String str)
方法,但我在MySQL中找不到任何内置函数。
MySQL中有没有内置的功能来实现这一点?
7条答案
按热度按时间v6ylcynt1#
@Marc B很接近。在MySQL中,以下语句返回12:
字符串
预计可能会使用该值,以下语句提取字符串最后一个下划线(即_)之前的左侧部分:
型
结果是“first_middle”。如果要包含分隔符,请用途:
型
如果他们增强了LOCATE,让它有一个从右边开始搜索的选项,那就太好了。
如果你想在最后一个空格后得到字符串的正确部分,一个更好的解决方案是:
型
返回“last”。
jtw3ybtb2#
如果您不想使用REVERSE的开销,请使用以下方法:
字符串
wrrgggsh3#
我想你可以这样使用substring_index:
字符串
-1将从字符串的末尾开始。
mec1mxoz4#
反向/索引的组合?
字符串
分解它,给定
Have_a_good_day
:型
qgzx9mmu5#
我发现这是一个很好的技巧:
字符串
这将返回最后一个匹配项的索引(=12)。基本上,您搜索字符串中最后一个分隔符之后的右侧部分,然后搜索该子字符串在整个字符串中的位置,这样就得到了位置:)
如果您想要取得这个左边的子字串,可以用途:
型
xmq68pz96#
虽然上面的代码可以成功地处理单个字符,但当我用它们来查找子字符串的最后一个出现时,它们就失败了。因此,我推荐下面的代码来执行这个任务:
字符串
返回17
b09cbbtk7#
select(length(“Have_a_good_day”)- instr(reverse(“Have_a_good_day”),'_')))from dual;