【问题标题】:Delete the string starting from any month in oracle sql从oracle sql中的任何月份开始删除字符串
【发布时间】:2020-01-15 14:18:48
【问题描述】:

我有以下需要修改的 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 子句

【问题讨论】:

  • 只是一个建议:你考虑过regexp_replace吗?
  • 对不起,我发现 substr 很简单,因为我之前没有使用过正则表达式
  • 您无法从您提供给我们的查询中获得第一个结果。在您的问题中,添加 long_comp_name 列中与此类似的原始值的一个示例:“SP Plus Corp”,以及与此类似的一个示例:“S&P 500 FUTR OPTN Jun20”。
  • 添加了 long_comp_name 的结果...我认为我们可以在这里使用 case 条件对吗?
  • 我已经编辑了我的查询和问题

标签: sql oracle substring


【解决方案1】:

认为您正在搜索类似的内容:

    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 

【讨论】:

  • 我已经编辑了我的查询和问题...我在 oracle 视图中使用该字段,所以不能使用 With 子句
  • 你只需要regexp_replace(n1,'(Jan|Feb|Mar|Apr|May|Jun)[0-9]{2}.*','')这部分,剩下的就是做一个可重现的例子……
  • 是的,我现在得到了结果,但我正在检查 12 月,它再次显示了月份的完整值...我想我需要在这个正则表达式中添加所有月份
  • 确定你必须加上剩下的 6 个月......认为这不会是一个大问题
  • 我今天再次检查了完整的数据,但得到的值如下所示,中间有月份名称。 : FTSE KLCI 期权 Jun20 期权, SX5E 红利期权 Dec20 期权, VSTOXX 期权 May20 期权, VSTOXX 期权 Aug20 期权, VSTOXX 期权 Aug20 期权, VSTOXX 期权 Jun20 期权,
猜你喜欢
  • 2023-02-23
  • 1970-01-01
  • 2015-11-23
  • 2011-07-27
  • 1970-01-01
  • 2014-10-19
  • 2019-02-06
  • 2013-08-30
  • 1970-01-01
相关资源
最近更新 更多