我们可以将 strright hive 功能转换为 oracle 功能吗

Posted

技术标签:

【中文标题】我们可以将 strright hive 功能转换为 oracle 功能吗【英文标题】:can we convert the strright hive function into oracle functionality 【发布时间】:2021-09-27 04:16:12 【问题描述】:

我的项目中有配置单元代码,我需要将其转换为 Oracle。几乎我已经完成了 oracle 代码,但在 select 语句中遇到了这个 STRRIGHT 功能的问题。

SELECT
clmn1,
clmn2,
CASE
WHEN strright(id,3) like "%d%d%d" THEN strright(id,3)
ELSE id
END

FROM table;

我知道我们可以使用SUBSTR(id,-3) 获得最正确的 3 个字符,但我不确定如何比较最后三个字符是数字还是字符。 通过上面的案例陈述,我可以理解,如果 ID 有最后 3 个字符作为数字,那么它应该只显示这 3 个数字,否则它应该返回整个 ID。你能帮我解决这个问题吗,我们如何用 sql(oracle) 实现这个输出。

【问题讨论】:

Oracle 有一个 REGEXP_LIKE 函数可以满足您的需求。 你能告诉我,如何用 regexp_like 检查 id 的最后 3 个三位数? 【参考方案1】:

那么 - 如果最后三个字符是数字,则返回这三个数字,否则返回整个 id?

类似这样的:

with
  test_data (id) as (
    select 'ab'     from dual union all
    select '23910'  from dual union all
    select 'ab-3'   from dual union all
    select '31-309' from dual union all
    select '33'     from dual
  )
select id, case when regexp_like(id, '\d3$')
                then substr(id, -3) else id end as new_str
from   test_data
;

ID      NEW_STR
------  -------
ab      ab    
23910   910   
ab-3    ab-3  
31-309  309   
33      33 

【讨论】:

【参考方案2】:

在 Oracle 中很简单:

SELECT
clmn1,
clmn2,
CASE
WHEN REGEXP_LIKE(substr(id,-3), '^[[:digit:]]+$') THEN substr(id,-3)
ELSE id
END
FROM table;

【讨论】:

以上是关于我们可以将 strright hive 功能转换为 oracle 功能吗的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Hive 表中的所有时间戳转换为 EAT

大数据技术hive介绍

hive 的功能和架构

Hive:将字符串转换为布尔值

我们如何在 hive 中将字符串转换为数组?

将 Hive 查询转换为雪花