sql - 如何在 Oracle SQL 查询中修剪前缀字符串?

标签 sql oracle

我有一列,其值由一个前缀和一些值组成,例如:

ABC-Car
ABC-Dog
ABC-Suit
CBR-Train

在我的查询中,我想删除某些前缀,例如如果我修剪掉“ABC-”,它会给我以下信息:
Car
Dog
Suit
CBR-Train

唯一的问题是,所有字符都对前缀后的部分有效。所以我可能有:
ABC-ABC-Cat

我希望这个修剪后的值返回:
ABC-Cat

TRIM 和 LTRIM 函数似乎使用模式/字符匹配而不是仅一次的字符串匹配。有没有办法用这些函数或另一个内置函数来完成我想要的?

目前我在想我必须使用 CASE 语句来检查每个值开头的前缀,如果存在,则将其关闭,否则返回该列不变。希望有更简单的方法。

最佳答案

regexp_replace是您要为此使用的内容。

用法示例:

select regexp_replace('ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'Car'
select regexp_replace('ABC-ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'ABC-Car'
select regexp_replace('ABC-ABC-Car', 'ABC-(.*)','\1') from dual; --returns 'CBR-Train'

关于sql - 如何在 Oracle SQL 查询中修剪前缀字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2254623/

相关文章:

oracle - 在pl/sql block 中声明变量

sql - 无法按非 ID 列执行 Postgres 组以获取包含最大值的 ID

c# - 一个 DELETE 查询,如何知道没有要删除的内容?

sql - 有没有办法将一列定义为另外两列的总和?

sql - oracle中将不同列的数据合并到特定列中

oracle - 查询以查找所有空表

java - 如何将 org. Threeten.bp 库中的 OffsetDateTime 插入 db Oracle 列

oracle - 如何在使用 DBMS_SCHEDULER.CREATE_JOB 创建的作业中运行复杂的 PL/SQL 代码

MySQL SELECT 即使添加了索引也很慢

c# - 使用 T-SQL 返回多个结果集