我在 Oracle DB 的 CLOB 数据类型列下使用以下正则表达式:
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:]\r\n\t]');
当数据纯粹是键盘上可打印的 ASCII 字符时,查询应返回 0。如果任何字符超出,即 •,MS Word 中的项目符号列表将被视为扩展 Unicode 字符,查询返回为 1。
目前,如果数据中包含超过1行的ASCII字符,Oracle仍然将其视为扩展Unicode字符,因此查询返回为1。
样本数据:
qwerty
qwerty
在进行 ASCII 检查之前,您可以使用
TRANSLATE
技巧从字符串中删除所有换行符、回车符或制表符。
SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS contains_extended_unicode
FROM my_table
WHERE REGEXP_LIKE(
TRANSLATE(my_column, CHR(10) || CHR(13) || CHR(09), ''),
'[^[:print:]]'
);