文字列の3番目のスペースのインデックスを見つける最も簡単な方法は何でしょうか。
私の目標は、このスペースで区切られたリストからCCC
を取得することです:AAAA BBBB CCCC DDDD EEE
。ここで、A、B、Dは固定長、Cは可変長、E F Gはオプションです。
Javaでは、開始点を10としてindexofを使用すると、3番目のスペースが得られますが、MySQLではそれができないようです。 「第3のインデックス」関数?
SUBSTRING_INDEX
このような関数
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(field, ' ', 3), ' ', -1)
FROM table
内部関数を呼び出すと、AAAA BBBB CCCC
一方、外側の関数呼び出しは、それをCCCC
にまで削減します。
通常、次のコマンドを使用して、文字列内のnth
Wordを選択できます。
SET @N = 3; -- 3rd Word
SET @delimiter = ' ';
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(words, @delimiter, @N), @delimiter, -1)
FROM
my_table
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 ;
以下のクエリを使用して、グループ化の後にテーブルからランダム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