首页 > 解决方案 > Hana 正则表达式未按预期工作

问题描述

我们在 Hana 中使用 LIKE_REGEXPR 来查找包含无效字符的记录。例如,我在 Address2 中的值是

 JALAN*# CHANGKAT

*不在我的允许列表中,所以我的查询应该显示记录。但它没有按预期工作。

代码:

select *
from contact PRD
WHERE adress = 'Home' AND
      (prd.Address2 is null or  
       PRD.Address2 LIKE_REGEXPR '[^[:alnum:][:space:]_#&-/.,():{}_\!;$'']');

但它没有显示JALAN*# CHANGKAT。查询有什么问题?

标签: sqlregexdatabasehana

解决方案


您已包含字符“。” 在您的正则表达式中 - 这通常会匹配任何字符。您应该转义 RegEx 中的任何“特殊”字符。 

我建议您在 RegEx 测试器中测试您的正则表达式(网上有很多可用的),看看它是否能满足您的需求。自己检查结果,但我希望您需要:

NOT LIKE_REGEXPR '^[a-zA-Z0-9\s\t_#&\-\/\.,\(\):\{\}_\\!;]+$'

这将查找与正则表达式不匹配的条目,该正则表达式将整个值(由 ^ 和 $ 括起来)与列表中的一个或多个字符匹配。如果您有最小长度,您也可以包含它,例如,您可以使用至少 8 个字符:

NOT LIKE_REGEXPR '^[a-zA-Z0-9\s\t_#&\-\/\.,\(\):\{\}_\\!;]{8,}$'

测试你的正则表达式!!


推荐阅读