我有以下示例
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;
我希望增强我的查询(最好使用正则表达式),这样我就不必明确指定时区的所有潜在值(正如目前在查询中所做的那样)
由于
答案 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。输出:
答案 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