我有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;