MySQL хранимая функция для множественной замены в запросе - PullRequest
1 голос
/ 15 октября 2011

у меня есть одна таблица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 для сравнения входного слова со словами из таблицы2 после процесса замены в таблице1, например:

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 настолько плохи, чтобы сделать это.как я могу это сделать?

1 Ответ

0 голосов
/ 21 октября 2011

Как вы уже догадались, вам нужно сделать это в хранимой процедуре.

Фактически сохраненная функция:

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 $$
...