web-dev-qa-db-ja.com

MySQLの2番目(または3番目)のインデックスの文字列

文字列の3番目のスペースのインデックスを見つける最も簡単な方法は何でしょうか。

私の目標は、このスペースで区切られたリストからCCCを取得することです:AAAA BBBB CCCC DDDD EEE。ここで、A、B、Dは固定長、Cは可変長、E F Gはオプションです。

Javaでは、開始点を10としてindexofを使用すると、3番目のスペースが得られますが、MySQLではそれができないようです。 「第3のインデックス」関数?

21
Bryan Field

SUBSTRING_INDEXこのような関数

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

内部関数を呼び出すと、AAAA BBBB CCCC一方、外側の関数呼び出しは、それをCCCCにまで削減します。

54
Mike Brant
3
Kermit

通常、次のコマンドを使用して、文字列内のnth Wordを選択できます。

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

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 ;

1
nierjesh kumar

以下のクエリを使用して、グループ化の後にテーブルからランダム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

0
nierjesh kumar