【发布时间】:2012-12-30 03:11:11
【问题描述】:
在字符串中定位第三个空格的索引的最简单方法是什么。
我的目标是从这个空格分隔列表中取出CCC:AAAA BBBB CCCC DDDD EEE。其中A、B、D为定长,C为变长,E F G可选。
在 Java 中,我会使用 indexof,起点为 10,这将使我获得第三个空格,但似乎我无法在 MySQL 中做到这一点,所以我想也许我可以找到“第三个索引”函数?
【问题讨论】:
在字符串中定位第三个空格的索引的最简单方法是什么。
我的目标是从这个空格分隔列表中取出CCC:AAAA BBBB CCCC DDDD EEE。其中A、B、D为定长,C为变长,E F G可选。
在 Java 中,我会使用 indexof,起点为 10,这将使我获得第三个空格,但似乎我无法在 MySQL 中做到这一点,所以我想也许我可以找到“第三个索引”函数?
【问题讨论】:
你会想像这样使用SUBSTRING_INDEX函数
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(field, ' ', 3), ' ', -1)
FROM table
内部函数调用会将您带到AAAA BBBB CCCC,而外部函数调用会将其缩减为CCCC。
【讨论】:
你可以使用SUBSTRING_INDEX。
【讨论】:
通常您可以使用以下命令在字符串中选择nth 字词:
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
【讨论】:
| Id | Name | Department |
|---|---|---|
| 1 | Amit Kumar Sharma | Computer Science |
*您可以通过简单的查询提取第三个字符串
查询:-
SELECT SUBSTRING_INDEX(Name, ' ', -1) as last_name FROM table_name
输出:- 夏尔马
【讨论】: