假设我有一个有2列的表:name和number。Name是一个字符串,可以有一个或多个单词,我想要一个新的查询选择名称编号,但在Name列,它只有最长的词,原来的表。
SQL中是否有一个函数只从字符串中提取最长的单词?
此过程返回短语pass like参数的第一个最长单词。
delimiter //
CREATE PROCEDURE getLongestWord(IN phrase VARCHAR(255), OUT w VARCHAR(255))
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE maxIteration INT DEFAULT 1;
DECLARE wordIndex INT DEFAULT 1;
DECLARE maxLength INT;
DECLARE proxLength INT;
SELECT LENGTH(phrase) - LENGTH(replace(phrase,' ','')) + 1 INTO maxIteration;
SELECT LENGTH(SUBSTRING_INDEX(phrase, ' ', i)) INTO maxLength;
WHILE i < maxIteration DO
SET i = i + 1;
SELECT LENGTH(SUBSTRING_INDEX(SUBSTRING_INDEX(phrase, ' ', i), ' ', - 1)) INTO proxLength;
IF (maxLength < proxLength) THEN
SET maxLength = proxLength;
SET wordIndex = i;
END IF;
END WHILE;
SET w = SUBSTRING_INDEX(SUBSTRING_INDEX(phrase, ' ', wordIndex), ' ', - 1);
END //
delimiter ;
要使用它:
CALL `getLongestWord`('one two three four five six seven eight nine ten', @p1); SELECT @p1 AS `w`;
返回:“three”(因为最长的单词有5个字母,这是其中的第一个)