删除oracle sql中从任意月份开始的字符串

删除oracle sql中从任意月份开始的字符串,sql,oracle,substring,Sql,Oracle,Substring,我有以下需要修改的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

我有以下需要修改的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
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 
现在我想修改我的查询,这样它就可以从任何月份开始的字符串中进一步删除部分值。例如,在上面的示例中,它将从“Jun20”中剪切此完整零件。对于其他值,它应该保持不变

我希望得到如下结果:

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
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视图中使用此查询字段,因此出于此原因,无法在select query中使用With子句

    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 

只是一个建议:你考虑过吗?对不起,没有。我发现substr很简单,因为我以前没有使用过regexp。你无法从提供给我们的查询中获得第一个结果。在您的问题中,添加一个与此类似的long_comp_name列原始值示例:“SP Plus Corp”,以及一个与此类似的示例:“S&P 500 FUTR OPTN Jun20”.添加了long_comp_name的结果…我想我们可以在这里使用case条件,对吗?我已编辑了我的查询和问题我已编辑了我的查询和问题…我正在使用oracle视图中的字段,因此无法与子句一起使用您只需要零件
regexp_替换(n1),(一月|二月|三月|四月|五月|六月)[0-9]{2}.*,“”)
剩下的是制作一个可复制的示例…是的,我现在得到了结果,但我正在检查12月份,它再次显示了月份的完整值…我想我需要在此regexp中添加所有月份。确保您必须添加剩余的6个月。。。虽然这不是一个大问题,但我今天再次检查了完整的数据,但得到的值如下所示,中间有月份名称:富时KLCI期权Jun20期权、SX5E股息期权Dec20期权、VSTOXX期权May20期权、VSTOXX期权Aug20期权、VSTOXX期权Aug20期权、VSTOXX期权Jun20期权、,