首页 > 解决方案 > Hive 中字符串比较中 % 与 * 之间的差异

问题描述

当试图列出具有特定名称格式的数据库中的所有表名称时,以下查询可以正常工作:

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 个运算符 * 和 % 有什么区别?

标签: hivehiveql

解决方案


这是正则表达式和类似模式之间的区别。

LIKE内置在 SQL 语言中。它有两个通配符:

  • %表示任意数量的字符,包括零。
  • _只代表一个字符。

正则表达式对于匹配字符串中的几乎任何模式要灵活得多。

当 SQL 被发明时,我认为正则表达式在计算机系统中并不常用——至少,IBM 从事关系数据库工作的人可能不熟悉 ATT 发明 Unix 的人。

当然,正则表达式比LIKE模式强大得多。Hive 通过RLIKE运算符(和其他一些功能)支持它们。

SHOW功能不是标准 SQL。因此,Hive 的开发人员选择了更灵活的模式匹配方法。


推荐阅读