提问者:小点点

从字符串SQL中选择最长的字


假设我有一个有2列的表:name和number。Name是一个字符串,可以有一个或多个单词,我想要一个新的查询选择名称编号,但在Name列,它只有最长的词,原来的表。

SQL中是否有一个函数只从字符串中提取最长的单词?


共1个答案

匿名用户

此过程返回短语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个字母,这是其中的第一个)