可以将直接的hive函数转换为oracle函数



我有hive代码在我的项目,我需要将其转换成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个最合适的字符,但我不确定如何比较最后三个字符是数字还是字符。有了上面的case语句,我可以理解,如果ID有最后3个字符作为数字,那么它应该只显示这3个数字,否则它应该返回整个ID。你能帮我解决这个问题吗?我们如何用sql(oracle)实现这个输出?

那么-如果最后三个字符是数字那么返回那三个数字,否则返回整个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, 'd{3}$')
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 

Oracle:

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

最新更新