Oracle数据库CLOB列正则匹配ASCII与扩展Unicode字符问题
解决Oracle CLOB列多行ASCII文本被误判含扩展Unicode的问题
问题原因
你当前使用的正则表达式[^[:print:]]会匹配所有非可打印ASCII字符,而多行文本里的**换行符(\n)、制表符(\t)**属于ASCII控制字符,不在[:print:]的覆盖范围内,所以这类字符会被误判为“扩展Unicode字符”,导致查询返回1。
修正后的查询语句
将换行、制表符加入允许的字符集合,修改REGEXP_LIKE的匹配条件即可:
SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS contains_extended_unicode FROM my_table WHERE REGEXP_LIKE(TO_CHAR(my_column), '[^[:print:]\n\t]');
如果你的数据中还包含回车符(\r),也可以一并加入正则:
SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS contains_extended_unicode FROM my_table WHERE REGEXP_LIKE(TO_CHAR(my_column), '[^[:print:]\n\t\r]');
说明
修改后的正则会排除可打印ASCII字符以及换行、制表符(回车),仅当数据中存在真正的扩展Unicode字符(如项目符号•)时才会匹配,从而返回正确的判定结果。
内容的提问来源于stack exchange,提问作者user2102665
相关产品推荐
相关产品推荐

