SQL实现:提取字符串中的英文与数字,排除外文字符
提取字符串中的英文与数字(排除外文字符)的SQL解决方案
你的问题出在误用了SPLIT_PART函数——它是基于固定分隔符拆分字符串的工具,不支持正则表达式匹配,所以无法实现字符提取需求。正确的做法是使用正则替换,将所有非英文、数字的字符(按需保留小数点等符号)替换为空,从而得到目标结果。
针对PostgreSQL的解决方案
PostgreSQL的REGEXP_REPLACE支持全局正则替换,语法如下:
SELECT searches AS 原始字符串, -- 保留英文、数字和小数点,去掉其他所有字符(包括外文字符、空格) REGEXP_REPLACE(searches, '[^A-Za-z0-9.]', '', 'g') AS 提取结果 FROM thai;
[^A-Za-z0-9.]:匹配所有不属于英文大小写、数字、小数点的字符'':将匹配到的字符替换为空'g':全局替换(所有匹配项都处理,而非只替换第一个)
针对MySQL 8.0+的解决方案
MySQL 8.0及以上版本也支持REGEXP_REPLACE,语法略有不同(默认全局替换):
SELECT searches AS 原始字符串, REGEXP_REPLACE(searches, '[^A-Za-z0-9.]', '') AS 提取结果 FROM thai;
自定义调整说明
- 如果不需要保留小数点,将正则中的
.去掉,改为[^A-Za-z0-9] - 如果需要保留空格,将空格加入允许的字符集合,改为
[^A-Za-z0-9. ]
样本数据测试结果
| 原始字符串 | 提取结果 |
|---|---|
| ๊ ufa800 | ufa800 |
| 0.75 ราคา บอล | 0.75 |
| 1.5 2 บอล | 1.52 |
| 1.5 ราคา บอล | 1.5 |
| 10 เว็บ สล็อต | 10 |
| 123bet เข้า สู่ ระบบ | 123bet |
| 123up slot | 123upslot |
内容的提问来源于stack exchange,提问作者johnnn
相关产品推荐
相关产品推荐

