title: MySQL Levenshtein
body: <p>I'm trying to create a MySQL function for calculating the levenshtein distance. I found a function which looked pretty close to what I need, however it keeps throwing errors everywhere - I am new to MySQL functions so I have no idea what is wrong?</p>
  
  <p>Here is the function:</p>
  
  <pre><code>DELIMITER $$
  
  CREATE FUNCTION LEVENSHTEIN( s1 CHAR(255), s2 CHAR(255)) 
  RETURNS int(3) 
  DETERMINISTIC
  BEGIN
      DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;
      DECLARE s1_char CHAR(255);
      DECLARE cv0, cv1 CHAR(255);
  
      SET s1_len = LENGTH(s1);
      SET s2_len = LENGTH(s2);
      SET cv1 = 0x00;
      SET j = 1;
      SET i = 1;
      SET c = 0;
  
      IF s1 = s2 THEN
          RETURN 0;
      ELSE IF s1_len = 0 THEN
          RETURN s2_len;
      ELSE IF s2_len = 0 THEN
          RETURN s1_len;
      ELSE
          WHILE j &lt;= s2_len DO 
            SET c = c + 1; 
            IF s1_char = SUBSTRING(s2, j, 1) THEN  
              SET cost = 0; ELSE SET cost = 1; 
            END IF; 
            SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost; 
                  SET c_temp = CONV(HEX(SUBSTRING(cv1, j+1, 1)), 16, 10) + 1;
                  IF c &gt; c_temp THEN
                      SET c = c_temp;
                  END IF;
                  SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1;
              END WHILE;
              SET cv1 = cv0, i = i + 1;
          END WHILE;
      END IF;
      RETURN c;
  END$$
  
  DELIMITER ;
  </code></pre>
  
  <p>And here is the error (so far).</p>
  
  <pre><code>#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE; END IF; RETURN c; END' at line 36
  </code></pre>
  
  <p><strong>EDIT:</strong> Original code can be found <a href="http://www.artfulsoftware.com/infotree/queries.php#552" rel="nofollow">here</a></p>