我们可以将 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 功能吗的主要内容,如果未能解决你的问题,请参考以下文章