【问题标题】:Oracle SQL 12.1 removing a changing substring from a stringOracle SQL 12.1 从字符串中删除不断变化的子字符串
【发布时间】:2018-04-05 11:36:03
【问题描述】:

我有下面的例子

05.04.2018 at 11:10:37 AEST

我的目标是从字符串中删除所有 alpha 字符。 预期的结果是删除“at”和“AEST”子字符串:

注意:日期和时间之间只能有一个空格。字符串末尾不能有空格

05.04.2018 11:10:37

“AEST”子字符串是一个时区,可以更改。

这是我当前的 SQL 查询:

select SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE('05.04.2018 at 11:10:37 AEST',' at',''), ' EST| AEDT| AEST', ''),1) from dual;

我正在寻求增强我的查询(最好使用正则表达式),因此我不必明确指定时区的所有潜在值(如当前在查询中所做的那样)

谢谢

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    您可以使用\s*[a-zA-Z]+ / \s*[[:alpha:]]+ 正则表达式:

    select REGEXP_REPLACE('05.04.2018 at 11:10:37 AEST','\s*[a-zA-Z]+','') as Result from dual
    

    模式匹配

    • \s* - 0+ 个空格字符
    • [a-zA-Z]+ - 1+ ASCII 字母([[:alpha:]]+ 将匹配任何字母)。

    查看online Oracle demo。输出:

    【讨论】:

    • 完美。谢谢!
    【解决方案2】:

    这样的?

    SQL> with test as (select '05.04.2018 at 11:10:37 AEST' col from dual)
      2  select regexp_replace(col, '\s*[[:alpha:]]+') result
      3  from test;
    
    RESULT
    -------------------
    05.04.2018 11:10:37
    
    SQL>
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      select trim(regexp_replace(col, '[a-zA-Z]', ''))
      

      我假设您也想删除最后的空格。

      【讨论】:

      • 谢谢。这种方法在日期和时间之间留出双倍空格
      【解决方案4】:

      保持简单!为什么不没有正则表达式?日期部分和时间部分总是在同一位置。

      select substr(col,1,10)  -- the date part
          ||' '||              -- the blank
          substr(col,15,8)     -- the time part
      from tab;
      

      例如

      SQL> select substr(col,1,10)  
              ||' '||
              substr(col,15,8)  "date+time"   
           from (
              select '05.04.2018 at 11:10:37 AEST' col
                  from dual) tab; 
      
      date+time
      -------------------
      05.04.2018 11:10:37
      

      【讨论】:

        猜你喜欢
        • 2019-02-06
        • 1970-01-01
        • 2021-04-13
        • 2011-07-27
        • 2019-09-08
        • 1970-01-01
        • 2014-10-19
        相关资源
        最近更新 更多