mysql - MySQL中给定子字符串的最后一个索引

我们可以使用 INSTR() 函数在 MySQL 中找到给定子字符串第一次出现的索引,如下所示。

SELECT instr('Have_a_good_day', '_') AS index_position

它将显示 5,指定子字符串的第一次出现,在这种情况下是下划线 _

我需要获取给定字符(或子字符串)的最后一次出现,例如 Java lastIndexOf(String str) String 类的方法,但我在 MySQL 中找不到任何内置函数。

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

最佳答案

@Marc B 很接近。在 MySQL 中,以下语句返回 12:

SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;

预期可能使用该值,以下语句在最后一个下划线(即_)之前提取字符串的左侧部分:

SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));

结果是“first_middle”。如果要包含分隔符,请使用:

SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);

如果他们增强了 LOCATE 以提供从右侧开始搜索的选项,那就太好了。

如果你想在最后一个空格之后的字符串的正确部分,一个更好的解决方案是:

SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);

这将返回“最后一个”。

https://stackoverflow.com/questions/12775352/

相关文章:

java - 在 Java 中处理 MySQL 日期时间和时间戳

mysql - SQL 按计数排序

mysql - 如何在不丢失列数据的情况下更改 MySQL 表的列位置?

mysql - 删除匹配行的更快方法?

mysql - 如何在 phpMyAdmin 中显示 UTF-8 字符?

mysql - 我的 SQL 有什么问题? #1089 - 不正确的前缀键

mysql - SQL:在 MySQL 中将现有列设置为主键

mysql - 如何重新排列 MySQL 列?

mysql - 如何处理 mysqldump 创建的巨大行长

mysql - InnoDB 需要一个多小时来导入 600MB 文件,MyISAM 在几分钟内