一个字段中存储的是一段文本,里面包含多个身份证号,怎么全部提取出来
用正则表达式,如下所示
select * from sfzmhm_table where sfzmhm regexp '^[1-9][[:digit:]]{7}((0[[:digit:]])|(1[0-2]))(([0|1|2][[:digit:]])|3[0-1])[[:digit:]]{3}$|^[1-9][[:digit:]]{5}[1-9][[:digit:]]{3}((0[[:digit:]])|(1[0-2]))(([0|1|2][[:digit:]])|3[0-1])[[:digit:]]{3}([0-9]|X)$'
mysql> set @sfzh='第一个:111005198901456789,第二个:111106196905130043、第三个:111106196905130043、第四个:111106196905130043';
Query OK, 0 rows affected (0.00 sec)
mysql> select REGEXP_SUBSTR(@sfzh,'[0-9]{17}[0-9|X]',1,1);
+---------------------------------------------+
| REGEXP_SUBSTR(@sfzh,'[0-9]{17}[0-9|X]',1,1) |
+---------------------------------------------+
| 111005198901456789 |
+---------------------------------------------+
1 row in set (0.00 sec)
mysql> select REGEXP_SUBSTR(@sfzh,'[0-9]{17}[0-9|X]',1,2);
+---------------------------------------------+
| REGEXP_SUBSTR(@sfzh,'[0-9]{17}[0-9|X]',1,2) |
+---------------------------------------------+
| 111106196905130043 |
+---------------------------------------------+
1 row in set (0.00 sec)
mysql>