theitd

MySQL Proper Case (Title Case) convert

Jan 22nd, 2019
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 2.05 KB | None | 0 0
  1. /*
  2. PROPER Case functions
  3. */
  4.  
  5.  
  6. DROP FUNCTION IF EXISTS lowerword;
  7. SET GLOBAL  log_bin_trust_function_creators=TRUE;
  8. DELIMITER |
  9. CREATE FUNCTION lowerword( str VARCHAR(128), word VARCHAR(5) )
  10. RETURNS VARCHAR(128)
  11. DETERMINISTIC
  12. BEGIN
  13.   DECLARE i INT DEFAULT 1;
  14.   DECLARE loc INT;
  15.  
  16.   SET loc = LOCATE(CONCAT(word,' '), str, 2);
  17.   IF loc > 1 THEN
  18.     WHILE i <= LENGTH (str) AND loc <> 0 DO
  19.       SET str = INSERT(str,loc,LENGTH(word),LCASE(word));
  20.       SET i = loc+LENGTH(word);
  21.       SET loc = LOCATE(CONCAT(word,' '), str, i);
  22.     END WHILE;
  23.   END IF;
  24.   RETURN str;
  25. END;
  26. |
  27. DELIMITER ;
  28.  
  29. DROP FUNCTION IF EXISTS tcase;
  30. SET GLOBAL  log_bin_trust_function_creators=TRUE;
  31. DELIMITER |
  32. CREATE FUNCTION tcase( str VARCHAR(128) )
  33. RETURNS VARCHAR(128)
  34. DETERMINISTIC
  35. BEGIN
  36.   DECLARE c CHAR(1);
  37.   DECLARE s VARCHAR(128);
  38.   DECLARE i INT DEFAULT 1;
  39.   DECLARE bool INT DEFAULT 1;
  40.   DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';
  41.   SET s = LCASE( str );
  42.   WHILE i <= LENGTH( str ) DO
  43.     BEGIN
  44.       SET c = SUBSTRING( s, i, 1 );
  45.       IF LOCATE( c, punct ) > 0 THEN
  46.         SET bool = 1;
  47.       ELSEIF bool=1 THEN  
  48.         BEGIN
  49.           IF c >= 'a' AND c <= 'z' THEN  
  50.             BEGIN
  51.               SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));
  52.               SET bool = 0;
  53.             END;
  54.           ELSEIF c >= '0' AND c <= '9' THEN
  55.             SET bool = 0;
  56.           END IF;
  57.         END;
  58.       END IF;
  59.       SET i = i+1;
  60.     END;
  61.   END WHILE;
  62.  
  63.   SET s = lowerword(s, 'A');
  64.   SET s = lowerword(s, 'An');
  65.   SET s = lowerword(s, 'And');
  66.   SET s = lowerword(s, 'As');
  67.   SET s = lowerword(s, 'At');
  68.   SET s = lowerword(s, 'But');
  69.   SET s = lowerword(s, 'By');
  70.   SET s = lowerword(s, 'For');
  71.   SET s = lowerword(s, 'If');
  72.   SET s = lowerword(s, 'In');
  73.   SET s = lowerword(s, 'Of');
  74.   SET s = lowerword(s, 'On');
  75.   SET s = lowerword(s, 'Or');
  76.   SET s = lowerword(s, 'The');
  77.   SET s = lowerword(s, 'To');
  78.   SET s = lowerword(s, 'Via');
  79.  
  80.   RETURN s;
  81. END;
  82. |
  83. DELIMITER ;
  84.  
  85.  
  86.  
  87.  
  88. SELECT tcase(full_title) FROM docman_cats;
  89.  
  90. UPDATE docman_cats SET full_title = tcase(full_title);
Advertisement
Add Comment
Please, Sign In to add comment