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

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

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

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

【问题讨论】:

    标签: mysql indexof


    【解决方案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
          

          输出:- 夏尔马

          【讨论】:

            猜你喜欢
            • 2020-01-08
            • 1970-01-01
            • 1970-01-01
            • 2021-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多