我有一个表,其中的一列包含用于匹配其他表中的行的正则表达式. 然后我需要像这样查询
SELECT st.id
FROM some_table st
WHERE '1234' REGEXP st.regexp;
只要regexp列包含有效的表达式或NULL,查询就可以正常运行. 但是,如果任何行中都有无效的regexp,则整个查询将失败,并显示错误3685. 因此,几乎不可能找到错误所在,因为没有用于验证正则表达式的函数. 像VALID_REGEXP()这样的函数可以这样解决这个问题
SELECT *
FROM some_table st
WHERE NOT VALID_REGEXP(st.regexp);
我通过执行以下操作来验证插入/更新
SELECT '' REGEXP 'regexp-to-test'
但是,如果一个无效的表达式找到了自己的方式,就没有办法在数百万行中找到它,因为您必须逐个测试它们并查找错误3685.
对于如何在一个查询中找到regexp列中具有无效正则表达式的所有行,有什么建议吗?
SELECT '' REGEXP <expression>
将让我知道它是否有效,因为它将返回一行,而如果失败,它将返回错误3685. 但是,逐行测试不是一种 Select ,因为需要测试大量的行.