我正在使用一个巨大的 DB2 表(数亿行),试图只选择与这个正则表达式匹配的行:
\b\d([- \/\\]?\d){12,15}(\D|$)
(即,单词边界,后跟 13 到 16 位数字,由空分隔或单个破折号、空格、斜杠或反斜杠分隔,后跟非数字或行尾。)
经过大量谷歌搜索,我设法创建了以下 SQL:
SELECT idx, comment FROM tblComment
WHERE xmlcast(xmlquery('fn:matches($c,"\b\d([- \/\\]?\d){12,15}(\D|$)")' PASSING comment AS "c") AS INTEGER)=1
据我所知,这非常有效......除非它找到带有非法字符的行:
在以字符串开头的 SQL/XML 表达式或函数参数中发现非法 XML 字符“#x3” [...]
数据包含许多非法 XML 字符,不能更改数据(我的只读访问权限有限,需要修复的行太多)。有没有办法去除或忽略非法字符,而无需先修改数据库?或者,我是否有不同的方式来编写具有相同效果的查询?