我尝试使用以下查询进行查询
select * from mytable where mycolumn rlike '\d~[\d\.]+~\d~[\d\.]+~\d~2~(33|44)`
这里是mytable
中的一些示例数据id | mycolumn
---|--------------------------------
1 | 1~2.3.1~9~333.2~3~2~33
2 | 1~1.4.3~4~233.2~4~2~44
3 | 1~53.0.2785.124~4~6.0.1~5~2~33
4 | 1~3~3~3~3~6~3
但是,结果始终为空。
如Hive Query Language Manual中所述,
如果A或B为NULL,则为NULL;如果A的任何(可能为空)子字符串与Java正则表达式B匹配,则为TRUE,否则为FALSE。例如,' foobar' RLIKE' foo'评估为TRUE,foobar' RLIKE' ^ f。* r $'。
我在Java中测试了RegExp,它运行正常。还尝试将\
替换为\\
,并尝试将~
替换为\~
,但没有运气。
我以前测试的Java代码如下
Pattern p = Pattern.compile("\\d~[\\d\\.]+~\\d~[\\d\\.]+~\\d~2~(33|44)");
有人能说出查询有什么问题吗?谢谢!
答案 0 :(得分:1)
我认为你可以这样做
where mycolumn rlike '.*~[0-9].[0-9].[0-9]~[0-9]~[0-9][0-9][0-9].[0-9]~[0-9]~ [0-9]~(33|44)';
or mycolumn rlike '.*(33|44)';
it won't work as java with '\\d~...' or '\d~'
答案 1 :(得分:0)
答案 2 :(得分:0)
您的开始和结束刻度线不匹配。您有一个反引号和一个单引号('`
)