Informix 12.10移除字符串非数字字符方法咨询及正则支持疑问
Informix 12.10 正则表达式支持及移除非数字字符实现方法
嘿,刚上手Informix的话,你问的这两个问题其实都有现成的解决方案,我来给你详细说说:
1. Informix 12.10 是否支持正则表达式?
当然支持!Informix从11.70版本就引入了正则表达式相关的内置函数,12.10作为后续版本,完全继承并完善了这些功能。常用的正则函数包括:
REGEXP_MATCH(source_str, pattern):检查源字符串是否匹配指定的正则模式,返回布尔值(t/f)REGEXP_REPLACE(source_str, pattern, replace_str):将源字符串中匹配正则模式的部分替换为指定字符串REGEXP_SUBSTR(source_str, pattern):从源字符串中提取匹配正则模式的子字符串
这些函数基本能覆盖你日常正则处理的需求,比如匹配、替换、提取操作。
2. 如何移除字符串中的非数字字符?
最直接的方法就是用上面提到的REGEXP_REPLACE函数,把所有非数字的字符替换为空字符串即可。正则模式我们用[^0-9],这个模式表示“匹配任何不是0-9的字符”。
举个实际例子:
假设你有一张表customer,其中contact_phone字段存储了带分隔符的电话号码(比如(010)8888-7777),现在要把这些非数字字符全部移除,更新字段值:
UPDATE customer SET contact_phone = REGEXP_REPLACE(contact_phone, '[^0-9]', '', 1, 0) WHERE contact_phone IS NOT NULL;
这里的参数解释一下:
- 第1个参数:要处理的源字段(
contact_phone) - 第2个参数:正则模式
[^0-9],匹配所有非数字字符 - 第3个参数:替换为空字符串(
'') - 第4个参数:
1表示从字符串的第1个字符开始匹配 - 第5个参数:
0表示替换所有匹配到的字符(如果设为1,只会替换第一个匹配项)
如果只是查询时临时清洗数据,不需要更新表,可以这么写:
SELECT contact_phone AS original_phone, REGEXP_REPLACE(contact_phone, '[^0-9]', '', 1, 0) AS cleaned_phone FROM customer;
注意事项:
如果你的Informix环境中正则函数无法正常使用,可能需要检查数据库的locale设置,确保使用的字符集支持正则表达式处理(12.10默认的UTF-8或GBK等常用字符集都没问题)。
内容的提问来源于stack exchange,提问作者kousuke
相关产品推荐
相关产品推荐

