首页 > 解决方案 > 从oracle sql中的任何月份开始删除字符串

问题描述

我有以下需要修改的 Oracle sql 查询:

    Select (SUBSTR(long_comp_name, 1, 23)) 
    Kontrakt_Bezeichnung, long_comp_name
    FROM TRT_AGG 
    where ROOT = 'SP';

查询结果如下:

Kontrakt_Bezeichnung                   long_comp_name
    SP Plus Corp                       SP Plus Corp
    SP Plus Corp                       SP Plus Corp 
    SP Plus Corp                       SP Plus Corp
    SP Plus Corp                       SP Plus Corp
    S&P 500 FUTR OPTN Jun20            S&P 500 FUTR OPTN Jun20P 4275
    S&P 500 FUTR OPTN Jun20            S&P 500 FUTR OPTN Jun20P 4275
    S&P 500 FUTR OPTN Jun20            S&P 500 FUTR OPTN Jun20P 4275
    S&P 500 FUTR OPTN Jun20            S&P 500 FUTR OPTN Jun20C 4275

现在我想修改我的查询,以便它将从任何月份开始的字符串中删除值的另一部分。例如,在上面的示例中,它将从“Jun20”中删除这个完整的部分。对于其他值,它应该保持不变。

我希望得到如下结果:

Kontrakt_Bezeichnung
        SP Plus Corp 
        SP Plus Corp 
        SP Plus Corp 
        SP Plus Corp 
        S&P 500 FUTR OPTN 
        S&P 500 FUTR OPTN 
        S&P 500 FUTR OPTN 
        S&P 500 FUTR OPTN 

我在 Oracle 视图中使用此查询字段,因此无法在选择查询中使用 With Clause

标签: sqloraclesubstring

解决方案


认为您正在寻找类似的东西:

    with d as (
    select     'SP Plus Corp OPTION' n1 from dual
    union all select 'S+P 500 FUTR OPTN Jun20 OPTION' from dual)
select n1, regexp_replace(n1,'(Jan|Feb|Mar|Apr|May|Jun)[0-9]{2}.*','') from d 

推荐阅读