add mysql function to remove non-alphanumeric characters
[migration-tools.git] / kmig.d / sql / init / 020-string_functions.sql
1 DELIMITER $
2 CREATE FUNCTION
3    m_remove_bracketed_text(str TEXT)
4    RETURNS TEXT
5    DETERMINISTIC
6     BEGIN
7     RETURN REPLACE(str, SUBSTRING(str, LOCATE('(', str), LENGTH(str) - LOCATE(')', REVERSE(str)) - LOCATE('(', str) + 2), '');
8     END
9 $
10 DELIMITER ;
11
12 DROP FUNCTION IF EXISTS m_split_string;
13 DELIMITER $
14 CREATE FUNCTION 
15    m_split_string (s TEXT, del VARCHAR(10), i INT)
16    RETURNS TEXT
17    DETERMINISTIC
18     BEGIN
19         DECLARE n INT ;
20         SET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1;
21         IF i > n THEN
22             RETURN NULL ;
23         ELSE
24             RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(s, del, i) , del , -1 ) ;        
25         END IF;
26     END
27 $
28 DELIMITER ;
29
30 DROP FUNCTION IF EXISTS m_string_segment_count;
31 DELIMITER $
32 CREATE FUNCTION 
33    m_string_segment_count(s TEXT, del VARCHAR(10))
34    RETURNS TEXT
35    DETERMINISTIC
36     BEGIN
37         DECLARE n INT ;
38         SET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1;
39         RETURN n;
40     END
41 $
42 DELIMITER ;
43
44 DROP FUNCTION IF EXISTS m_remove_nonalpha;
45 delimiter $
46 CREATE FUNCTION m_remove_nonalpha( s CHAR(255) ) RETURNS CHAR(255) DETERMINISTIC
47     BEGIN
48       DECLARE var1, length SMALLINT DEFAULT 1;
49       DECLARE result CHAR(255) DEFAULT '';
50       DECLARE ch CHAR(1);
51       SET length  = CHAR_LENGTH( s );
52       REPEAT
53         BEGIN
54           SET ch = MID( s, var1, 1 );
55           IF ch REGEXP '[[:alnum:]]' THEN
56             SET result =CONCAT(result ,ch);
57           END IF;
58           SET var1 = var1 + 1;
59         END;
60       UNTIL var1 >length  END REPEAT;
61       RETURN result ;
62     END 
63   $
64   DELIMITER ;