Oracle SQL 12.1从字符串中删除更改的子字符串

时间:2018-04-05 11:36:04

标签: sql regex oracle

我有以下示例

05.04.2018 at 11:10:37 AEST

我的目标是从字符串中删除所有alpha字符。 预期的结果是删除'在'和' 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;

我希望增强我的查询(最好使用正则表达式),这样我就不必明确指定时区的所有潜在值(正如目前在查询中所做的那样)

由于

4 个答案:

答案 0 :(得分:3)

您可以使用\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。输出:

enter image description here

答案 1 :(得分:3)

这样的东西?

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>

答案 2 :(得分:1)

您可以使用:

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

我假设您也想删除最终空间。

答案 3 :(得分:1)

保持简单!为什么不没有正则表达式?日期部分和时间部分始终处于相同位置。

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

e.g。

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