Hive 查询以提取具有字母数字字符的列

Posted

技术标签:

【中文标题】Hive 查询以提取具有字母数字字符的列【英文标题】:Hive query to extract a column which has alphanumeric characters 【发布时间】:2021-11-16 03:22:48 【问题描述】:

我有一个要求,我需要根据列上的过滤器提取数据,并且过滤器将仅提取字母数字值,这意味着它应该至少包含一个字母和一个数字以供考虑。 例如,如果我有五个数字,例如 333、abc、ab333、+33、+ab33,则输出应该只有 ab333 和 +ab33。 我试图使用 rlike 函数来实现这一点,查询如下,但这给出了表中的所有记录。

select column_name from table_name where column_name rlike '^[a-zA-Z0-9]+$';

我还尝试了一种不同的方法,使用下面的查询,但如果是特殊字符,例如 +,下面的查询会给出错误的结果。

select column_name from table_name where column_name not rlike '^[0-9]+$';

如果有不同的方法,任何人都可以指导我的错误。

【问题讨论】:

rlike '^\\+*[a-zA-Z]+[0-9]+$' @leftjoin 感谢您的回答。我已经测试了上述逻辑,它涵盖了一些场景,但如果记录以数字开头,则不予考虑。例如,如果数字是 ab33逻辑工作正常,但如果是 33ab,则逻辑没有考虑到它。此外,如果数字开头或有任何特殊字符,则不考虑它。例如,如果数字是 +ab33 或 ab33+,则逻辑不考虑数字。 使用'^\\+?(?:[0-9]+[a-zA-Z]|[a-zA-Z]+[0-9])[0-9a-zA-Z]*$' @WiktorStribiżew 感谢您的回答。逻辑按照我的要求运行良好。您能否将其添加为答案,以便我将其标记为正确答案。 【参考方案1】:

你可以使用

RLIKE '^\\+?(?:[0-9]+[a-zA-Z]|[a-zA-Z]+[0-9])[0-9a-zA-Z]*$'

详情

^ - 字符串开头 \+? - 一个可选的 + 符号 (?:[0-9]+[a-zA-Z]|[a-zA-Z]+[0-9]) - 一个或多个数字后跟一个字母或一个或多个字母后跟一个数字,然后 [0-9a-zA-Z]* - 零个或多个字母数字字符 $ - 字符串结束。

【讨论】:

以上是关于Hive 查询以提取具有字母数字字符的列的主要内容,如果未能解决你的问题,请参考以下文章

非字母数字的 PostgreSQL 查询

使用正则表达式提取部分字符串的 Hive 查询

Oracle查询在特殊字符后选择单独的字母+数字和数字

oracle中怎么判断查询的列中是不是包含字母?

尝试在 Hive 上查找数字不适用于类似查询

T-SQL选择查询以删除非数字字符