当尝试列出具有特定名称格式的数据库中的所有表名时,以下查询可以正常工作:
show tables like '*case*';而下面的代码则不是
show tables like '%case%';另一方面,当比较字符串列中的实际数据时,反之亦然
工作查询:
select column from database.table where column like '%ABC%' limit 5;不工作的查询:
select column from database.table where column like '*ABC*' limit 5;2个运算符*和%的区别是什么?
发布于 2020-03-22 20:19:22
这就是正则表达式和like模式之间的区别。
LIKE内置于SQL语言中。它有两个通配符:
%表示任意数量的字符,包括zero._表示一个字符。正则表达式更加灵活,几乎可以匹配字符串中的任何模式。
当SQL被发明时,我不认为正则表达式在计算机系统中普遍使用--至少,在IBM从事关系数据库工作的人可能还不熟悉发明Unix的ATT人。
当然,正则表达式比LIKE模式强大得多。而配置单元通过RLIKE运算符(和其他一些函数)支持它们。
SHOW功能不是标准的SQL。因此,Hive的开发人员选择了更灵活的模式匹配方法。
发布于 2020-03-22 15:57:30
HiveQL试图模仿SQL,但它并不严格遵循它的标准。
通配符的使用与LIKE子句无关,而是与语句本身相关。SQL语句基于Java正则表达式验证通配符,而当涉及到SELECT语句时,Hive尝试坚持使用SHOW的通配符验证。
https://stackoverflow.com/questions/60796646
复制相似问题