MySQL:字符串中的数字、英文字符、汉字提取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39198406/article/details/83543648

原文:https://blog.csdn.net/oyezhou/article/details/81665643
另外一篇类似的:https://blog.csdn.net/haijiege/article/details/79460236

创建一个Num_char_extract.sql文件,内容如下,在mysql shell中使用source执行,这样就新建了一个函数。

DELIMITER $$

DROP FUNCTION IF EXISTS `Num_char_extract`$$

CREATE FUNCTION `Num_char_extract`(Varstring VARCHAR(100)CHARSET utf8, flag INT) RETURNS VARCHAR(50) CHARSET utf8
BEGIN
	DECLARE len INT DEFAULT 0;
	DECLARE Tmp VARCHAR(100) DEFAULT '';
	SET len=CHAR_LENGTH(Varstring);
	IF flag = 0 
	THEN
		WHILE len > 0 DO
		IF MID(Varstring,len,1)REGEXP'[0-9]' THEN
		SET Tmp=CONCAT(Tmp,MID(Varstring,len,1));
		END IF;
		SET len = len - 1;
		END WHILE;
	ELSEIF flag=1
	THEN
		WHILE len > 0 DO
		IF (MID(Varstring,len,1)REGEXP '[a-zA-Z]') 
		THEN
		SET Tmp=CONCAT(Tmp,MID(Varstring,len,1));
		END IF;
		SET len = len - 1;
		END WHILE;
	ELSEIF flag=2
	THEN
		WHILE len > 0 DO
		IF ( (MID(Varstring,len,1)REGEXP'[0-9]')
		OR (MID(Varstring,len,1)REGEXP '[a-zA-Z]') ) 
		THEN
		SET Tmp=CONCAT(Tmp,MID(Varstring,len,1));
		END IF;
		SET len = len - 1;
		END WHILE;
	ELSEIF flag=3
	THEN
		WHILE len > 0 DO
		IF NOT (MID(Varstring,len,1)REGEXP '^[u0391-uFFE5]')
		THEN
		SET Tmp=CONCAT(Tmp,MID(Varstring,len,1));
		END IF;
		SET len = len - 1;
		END WHILE;
	ELSE 
		SET Tmp = 'Error: The second paramter should be in (0,1,2,3)';
		RETURN Tmp;
	END IF;
	RETURN REVERSE(Tmp);
    END$$

DELIMITER ;
mysql> source /tmp/tmpcode/Num_char_extract.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.15 sec)

测试效果

mysql> select Num_char_extract("123中国ABC",0);
+------------------------------------+
| Num_char_extract("123中国ABC",0)   |
+------------------------------------+
| 123                                |
+------------------------------------+
1 row in set (0.06 sec)

mysql> select Num_char_extract("123中国ABC",2);
+------------------------------------+
| Num_char_extract("123中国ABC",2)   |
+------------------------------------+
| 123ABC                             |
+------------------------------------+
1 row in set (0.00 sec)

mysql> select Num_char_extract("123中国ABC",3);
+------------------------------------+
| Num_char_extract("123中国ABC",3)   |
+------------------------------------+
| 中国                               |
+------------------------------------+
1 row in set (0.00 sec)

mysql> insert into t2(name) values("1500万人民币元"),("300美元"),("54648万人民币"),("855598万日元");
Query OK, 4 rows affected (0.14 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select name from t2;
+---------------------+
| name                |
+---------------------+
| 1500万人民币元      |
| 300美元             |
| 54648万人民币       |
| 855598万日元        |
+---------------------+
4 rows in set (0.00 sec)

mysql> select name,Num_char_extract(name,3) from t2;
+---------------------+--------------------------+
| name                | Num_char_extract(name,3) |
+---------------------+--------------------------+
| 1500万人民币元      | 万人民币元               |
| 300美元             | 美元                     |
| 54648万人民币       | 万人民币                 |
| 855598万日元        | 万日元                   |
+---------------------+--------------------------+
4 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/weixin_39198406/article/details/83543648
今日推荐