我正忙着为商家的特定名称建立一个查找表。我尝试使用以下正则表达式,但它返回的结果少于标准"喜欢" Netezza SQL中的函数。请参考以下内容:
SQL Like函数:其中trim(upper(a.MRCH_NME))喜欢'%CNA%' - 返回4622场比赛
Netezza SQL中的正则表达式函数:其中array_combine(regexp_extract_all(trim(upper(a.MRCH_NME)),'。* CNA \ s',' i&# 39;),' |')=' CNA' - 返回2226场比赛
我查看了两个结果集,发现以下字符串不匹配:
!C CNA INT ARR
*CNA PLATZ 0400
015764 CNA CRAD
C#CNA PARK 0
我使用了以下正则表达式: /.* CNA \ s' /
知道上述字符串为什么不作为匹配项返回?
谢谢。
答案 0 :(得分:1)
您可能应该使用regexp_like
:
SELECT *
FROM yourTable
WHERE REGEXP_LIKE(MRCH_NME, 'CNA[ ]', 'i');
这在逻辑上与使用LIKE
的以下查询相同:
SELECT *
FROM yourTable
WHERE MRCH_NME LIKE '%CNA ';
答案 1 :(得分:0)
在我看来,问题更多的是你的代码而不是正则表达式。查看:like '%CNA %'
返回包含一个CNA
子字符串的所有条目,后跟条目中任意位置的文字空格。 '.*CNA\s'
正则表达式匹配除换行符之外的任何0+字符,后跟CNA
和**任何空格字符*。
度Acc。到this reference,\s
匹配“空白字符。空格定义为[\t\n\f\r\p{Z}]
。
因此,您实际上应该使用
WHERE REGEXP_LIKE(MRCH_NME, 'CNA ', 'i')
或者,更好地使用单词边界检查:
WHERE REGEXP_LIKE(MRCH_NME, '\bCNA\b', 'i')
其中\b
标记从单词到非单词和非单词到单词字符的转换,从而确保整个单词搜索并证明正则表达式的使用。
如果您不需要将商家名称作为整个单词进行匹配,请使用常规LIKE
和'%CNA %'
,它应该更有效。