删除 Hive SQL 查询中两个子字符串之间的所有字符

Posted

技术标签:

【中文标题】删除 Hive SQL 查询中两个子字符串之间的所有字符【英文标题】:Remove all characters between two substrings in Hive SQL query 【发布时间】:2021-04-02 08:26:37 【问题描述】:

我有一列看起来像这样的字符串:

字符串:SECTION1/SECTION2/0000123456789/SECTION3/SECTION4 字符串:SECTION1/SECTION2/0000987654321/SECTION3/SECTION4 字符串:SECTION1/SECTION2/00005552121X/SECTION3/SECTION4 字符串:SECTION1/SECTION2/00005552222:ID/SECTION3/SECTION4

我正在尝试使用 REGEXP_REPLACE 从中间替换可变长度、alpha/num/special char 字符串并将其替换为通用的东西,这样它们都看起来像这样:

STRING:SECTION1/SECTION2/id_number_removed/SECTION3/SECTION4

我整个上午都在尝试找到正确的正则表达式来替换“/SECTION2/”和“/SECTION3/”之间的所有内容,但没有成功。

【问题讨论】:

【参考方案1】:

将正则表达式模式'SECTION2/[^/]+/SECTION3' 替换为'SECTION2/id_number_removed/SECTION3'[^/]+ 表示 1 个或多个不是斜杠的字符。

select regexp_replace(
    'STRING:SECTION1/SECTION2/00005552222:ID/SECTION3/SECTION4',
    'SECTION2/[^/]+/SECTION3', 
    'SECTION2/id_number_removed/SECTION3');

给了

STRING:SECTION1/SECTION2/id_number_removed/SECTION3/SECTION4

【讨论】:

完美!谢谢。

以上是关于删除 Hive SQL 查询中两个子字符串之间的所有字符的主要内容,如果未能解决你的问题,请参考以下文章

如何用SQL语句的查询实现两个表之间的查询连接

带有多个子查询的 SQL 错误 10249 Hive

如何在 Hive/SQL 的 where/have 子句中使用 min()(以避免子查询)

oracle sql 转换成 hive sql -子查询转关联查询(十七),子查询中有2个表外字段关联写法,round函数与power函数的运用

Oracle SQL 更新基于两个表之间的子查询

如何在 Hive SQL 中按日期范围独家加入?