MySQL 字符串中的第二个(或第三个)索引

Posted

技术标签:

【中文标题】MySQL 字符串中的第二个(或第三个)索引【英文标题】:MySQL Second (or third) Index Of in String 【发布时间】:2012-12-30 03:11:11 【问题描述】:

在字符串中定位第三个空格的索引的最简单方法是什么。

我的目标是从这个空格分隔列表中取出CCCAAAA BBBB CCCC DDDD EEE。其中A、B、D为定长,C为变长,E F G可选。

在 Java 中,我会使用 indexof,起点为 10,这将使我获得第三个空格,但似乎我无法在 mysql 中做到这一点,所以我想也许我可以找到“第三个索引”函数?

【问题讨论】:

【参考方案1】:

你会想像这样使用SUBSTRING_INDEX函数

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(field, ' ', 3), ' ', -1)
FROM table

内部函数调用会将您带到AAAA BBBB CCCC,而外部函数调用会将其缩减为CCCC

【讨论】:

很好地解释了如何按数字获取项目的索引。因此,如果我有一个包含 8 个项目的 csv,我现在可以按数字获得这 8 个项目中的任何一个......非常好,非常感谢。【参考方案2】:

你可以使用SUBSTRING_INDEX

【讨论】:

这个仅链接的答案与接受的答案相比相形见绌。我认为这甚至不是一个答案,而是一个错误的评论。它给出了一些方向,但实际上并没有尝试解决问题。【参考方案3】:

通常您可以使用以下命令在字符串中选择nth 字词:

SET @N = 3; -- 3rd word
SET @delimiter = ' ';
SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(words, @delimiter, @N), @delimiter, -1)
FROM
  my_table

【讨论】:

【参考方案4】:

DROP FUNCTION IF EXISTS `Find_string_by_position`$$

CREATE DEFINER=`root`@`localhost` FUNCTION
`Find_string_by_position`(str VARCHAR(255), delimeter VARCHAR(255),pos INT(2)) RETURNS VARCHAR(255) CHARSET utf8mb4 BEGIN
       DECLARE s VARCHAR(255);  
       DECLARE d VARCHAR(255); 
       DECLARE p INT DEFAULT 1;
       DECLARE val VARCHAR(255);


       SET s = LCASE(str); 
       SET d = delimeter;
       SET p = pos;
       SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(s,d,p),d,-1) INTO @val; 

       RETURN @val;  

   END$$

DELIMITER ;

【讨论】:

【参考方案5】:

使用以下查询在分组后从表中查找任何随机 id。 这里 id 是 autoincrement_id。

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(id),",",FLOOR(RAND()*COUNT(DISTINCT id))+1),",",-1) AS random_id FROM tableName GROUP BY groupbyColumn

【讨论】:

【参考方案6】:
Id Name Department
1 Amit Kumar Sharma Computer Science

*您可以通过简单的查询提取第三个字符串

查询:-

SELECT SUBSTRING_INDEX(Name, ' ', -1) as last_name FROM table_name

输出:- 夏尔马

【讨论】:

以上是关于MySQL 字符串中的第二个(或第三个)索引的主要内容,如果未能解决你的问题,请参考以下文章

如何选择具有给定类名的第一个、第二个或第三个元素?

如何在多个实例的python上找到特定字符的索引?

根据相邻列值 Pandas 从列中按第一个或第二个空格提取字符串

css #CSS:如何使用CSS获得第二个或第三个孩子

您如何在 F# 或任何函数式语言中对第二个(或第三个、第四个、...)参数进行 curry?

mysql数据库中的substring函数问题?