0

我正在寻求帮助,试图弄清楚如何重新编写以下 SQL 以提取来自字段右侧的冒号 (:) 或斜杠 (/) 的第一个实例之后的任何内容。

我目前使用类似下面的内容,但这只会从冒号 (:) 之后提取,我希望它也可以查找斜杠 (/):

select substr(DBURL,instr(DBURL,':',-1)+1) as DB
from databasename;

DBURL 字段中的数据示例:

trld:client:blah:data
trld:client:blah/data

我只是想提取刺痛的数据部分。

4

2 回答 2

2

您可以使用正则表达式,特别是REGEXP_SUBSTR

select regexp_substr(DBURL,            --source string
                    '[^:/]+$'          --pattern that you are looking for
                    ) as DB 
  from databasename;

打破格局,

[^:/]  : match anything other than a colon or slash.
+      : match the preceding pattern one or more times
$      : match the end of the string.

总而言之,此模式匹配字符串末尾的冒号或斜杠以外的任何内容。

于 2013-10-02T01:46:35.403 回答
2

只需将您的两个包装instrgreatest.

11:17:02 (20)SYSTEM@dwal> ed
Wrote file S:\spool\dwal\BUF_SYSTEM_20.sql

  1  with databasename(dburl) as (
  2   select 'trld:client:blah:data' from dual union all
  3   select 'trld:client:blah\data' from dual
  4  )
  5  select substr(DBURL,greatest(instr(DBURL,'\',-1), instr(DBURL,':',-1))+1) as DB
  6* from databasename
11:17:14 (20)SYSTEM@dwal> /

DB
---------------------
data
data

Elapsed: 00:00:00.10

RegEx 也可以,但速度较慢。

于 2013-10-02T03:19:04.553 回答