【问题标题】:How can I trim a prefix string in an Oracle SQL query?如何在 Oracle SQL 查询中修剪前缀字符串?
【发布时间】:2010-02-12 19:43:59
【问题描述】:

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

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

在我的查询中,我想删除某些前缀,例如如果我去掉“ABC-”,它会给我以下信息:

Car
Dog
Suit
CBR-Train

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

ABC-ABC-Cat

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

ABC-Cat

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

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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    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'
    

    【讨论】:

    • 请注意正则表达式函数是 10g+。
    • @Ponies,有时感觉就像你在跟踪我:你解决了所有的 SQL 问题。 :) +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2014-05-26
    • 2012-01-29
    • 2010-09-15
    • 2012-04-29
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多