我尝试使用正规表达式要检查字串中有无控制字元或CHR(128~159、160),不过在测试使用单一大写英字Z就会出现符合的情况(查询结果是1,小写z则结果为0),想请教大神这是为什么呢?NLS_CHARACTERSET=AL32UTF8
SELECT COUNT(1)
FROM dual
WHERE REGEXP_LIKE(\'Z\', \'[[:cntrl:]]|[\\x80-\\x9F]|\\xA0\');
1 个回答
1
尼克
iT邦大师 1 级 ‧ 2024-10-11 15:33:08
REGEXP_LIKE(srcstr, pattern [,match_option])
在此函数中:
srcstr:搜索值
pattern:正则表达式
match_option:用于更改默认匹配的选项。可以包含以下一个或多个值:
“c”:使用区分大小写的匹配(默认值)
“i”:使用区分大小写的匹配
“n”:允许匹配任何字符的运算符
“m”:将源字符串作为多行处理
使用正则表达式
测试看看
-
1 -
-
cct8888991155
iT邦新手 5 级 ‧
2024-10-11 16:05:30
由于实际上资料大小写可能同时存在,预设c应该是合理
我测试改成i后,单看Z与z的结果一样了!
不过在套用近似实际资料后,又出错了......
您认为还有其他可能的原因吗
SELECT COUNT(1)
FROM dual
WHERE REGEXP_LIKE(\'G3365-ACS-39AS\', \'[[:cntrl:]]|[\\x80-\\x9F]|\\xA0\', \'i\');
```sql
SELECT COUNT(1)
FROM dual
WHERE REGEXP_LIKE('G3365-ACS-39AS', '[[:cntrl:]]|[\\x80-\\x9F]|\\xA0', 'i');
```
修改