【问题标题】:mysql stored function for multiple replacing in a querymysql 存储函数,用于在查询中进行多次替换
【发布时间】:2011-12-08 03:08:40
【问题描述】:

我有一张桌子1

tid letter1 letter2
1   a       e
2   p       b
3   c       k
4   pp      bb
5   rr      ll

还有一张桌子2

t2id word
1    banana
2    strawberry
3    apple
4    grape

我需要一个 mysql 函数在 table1 上的替换过程之后将输入单词与 table2 中的单词进行比较,例如:

SELECT CHAR_LENGTH(word) AS charl FROM table2;

DECLARE i INT DEFAULT 0;

SET query = CONCAT(
    ' SELECT word FROM table2 WHERE ( ',
    WHILE i < charl DO 
        //if word's i'nth letter found in the table1
        IF (SELECT letter2 FROM table1 WHERE word{i} = letter1)
        //replace letter1 with letter2 on this row
        'REPLACE(word,letter1,letter2) AND ', 
    END;
    ' ) = 'inputword' ';

我的 mysql 知识太差了,无法做到这一点。我该怎么做?

【问题讨论】:

    标签: mysql loops replace concat stored-functions


    【解决方案1】:

    正如您所猜测的,您需要在存储过程中执行此操作。

    其实是一个存储函数:

    DELIMITER $$
    
    CREATE FUNCTION ReplaceChars(Fullword VARCHAR(255)
                               , ReplaceThis VARCHAR(255) 
                               , WithThis VARCHAR(255) ) RETURNS VARCHAR(255)
    BEGIN
      DECLARE Result VARCHAR(255);
      DECLARE i INTEGER;     
    
      SET Result = Fullword;
      IF LENGTH(ReplaceThis) = LENGTH(WithThis) THEN 
        SET i = LENGTH(ReplaceThis);
        WHILE i > 0 DO
          SET Result = REPLACE(Result, MID(ReplaceThis,i,1),MID(WithThis,i,1));
          SET i = i - 1;
        END WHILE;
      END IF;
      RETURN Result;
    END $$
    

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 2012-09-08
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多