Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.92 KB | None | 0 0
  1. DELIMITER $$
  2. --
  3. -- Functions
  4. --
  5. CREATE FUNCTION `transliterate_func`(original VARCHAR(512)) RETURNS VARCHAR(512) CHARSET utf8
  6. BEGIN
  7.  
  8. DECLARE translit VARCHAR(512) DEFAULT '';
  9. DECLARE len INT(3) DEFAULT 0;
  10. DECLARE pos INT(3) DEFAULT 1;
  11. DECLARE letter CHAR(4);
  12.  
  13. SET original = TRIM(LOWER(original));
  14. SET len = CHAR_LENGTH(original);
  15.  
  16. WHILE (pos <= len) DO
  17. SET letter = SUBSTRING(original, pos, 1);
  18.  
  19. CASE TRUE
  20.  
  21. WHEN letter IN('á','à','â','ä','å','ā','ą','ă','а','а') THEN SET letter = 'a';
  22. WHEN letter IN('č','ć','ç','ć') THEN SET letter = 'c';
  23. WHEN letter IN('ď','đ','д','д') THEN SET letter = 'd';
  24. WHEN letter IN('é','ě','ë','è','ê','ē','ę','е','е') THEN SET letter = 'e';
  25. WHEN letter IN('ģ','ğ') THEN SET letter = 'g';
  26. WHEN letter IN('í','î','ï','ī','î','и','і') THEN SET letter = 'i';
  27. WHEN letter IN('ķ') THEN SET letter = 'k';
  28. WHEN letter IN('ľ','ĺ','ļ','ł') THEN SET letter = 'l';
  29. WHEN letter IN('ň','ņ','ń','ñ') THEN SET letter = 'n';
  30. WHEN letter IN('ó','ö','ø','õ','ô','ő','ơ','о','о') THEN SET letter = 'o';
  31. WHEN letter IN('ŕ','ř','р','р') THEN SET letter = 'r';
  32. WHEN letter IN('š','ś','ș','ş','с','с') THEN SET letter = 's';
  33. WHEN letter IN('ť','ț') THEN SET letter = 't';
  34. WHEN letter IN('ú','ů','ü','ù','û','ū','ű','ư') THEN SET letter = 'u';
  35. WHEN letter IN('ý','у','у') THEN SET letter = 'y';
  36. WHEN letter IN('ž','ź','ż') THEN SET letter = 'z';
  37.  
  38. WHEN letter = 'б' THEN SET letter = 'b';
  39. WHEN letter = 'в' THEN SET letter = 'v';
  40. WHEN letter = 'г' THEN SET letter = 'g';
  41. WHEN letter = 'д' THEN SET letter = 'd';
  42. WHEN letter = 'ж' THEN SET letter = 'zh';
  43. WHEN letter = 'з' THEN SET letter = 'z';
  44. WHEN letter = 'и' THEN SET letter = 'i';
  45. WHEN letter = 'й' THEN SET letter = 'i';
  46. WHEN letter = 'к' THEN SET letter = 'k';
  47. WHEN letter = 'л' THEN SET letter = 'l';
  48. WHEN letter = 'м' THEN SET letter = 'm';
  49. WHEN letter = 'н' THEN SET letter = 'n';
  50. WHEN letter = 'п' THEN SET letter = 'p';
  51. WHEN letter = 'т' THEN SET letter = 't';
  52. WHEN letter = 'ф' THEN SET letter = 'f';
  53. WHEN letter = 'х' THEN SET letter = 'ch';
  54. WHEN letter = 'ц' THEN SET letter = 'c';
  55. WHEN letter = 'ч' THEN SET letter = 'ch';
  56. WHEN letter = 'ш' THEN SET letter = 'sh';
  57. WHEN letter = 'щ' THEN SET letter = 'shch';
  58. WHEN letter = 'ъ' THEN SET letter = '';
  59. WHEN letter = 'ы' THEN SET letter = 'y';
  60. WHEN letter = 'э' THEN SET letter = 'e';
  61. WHEN letter = 'ю' THEN SET letter = 'ju';
  62. WHEN letter = 'я' THEN SET letter = 'ja';
  63.  
  64. WHEN letter IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z')
  65. THEN SET letter = letter;
  66.  
  67. ELSE
  68. SET letter = '-';
  69.  
  70. END CASE;
  71.  
  72. SET translit = CONCAT(translit, letter);
  73. SET pos = pos + 1;
  74. END WHILE;
  75.  
  76. WHILE (translit REGEXP '\-{2,}') DO
  77. SET translit = REPLACE(translit, '--', '-');
  78. END WHILE;
  79.  
  80. RETURN TRIM(BOTH '-' FROM translit);
  81.  
  82. END$$
  83.  
  84. DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement