微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

regexp_substr全部出现doc XXX

如何解决regexp_substr全部出现doc XXX

以下是示例代码

set define off;
drop table brol;

create table brol
(
br varchar2(4000)
);

INSERT INTO brol ( br ) VALUES ( 'Proposition de décret institutionnalisant l assemblée citoyenne et le conseil citoyen,déposée par Madame Schyns (Doc. 221 (2019-2020) N° 1 et 1bis)
Proposition de décret spécial modifiant les articles 2,5,6 et 7 du décret spécial du 19 juillet 2018 instituant la consultation populaire,déposée par Madame Schyns (Doc. 222 (2019-2020) N° 1)
Proposition de modification du Règlement du Parlement de Wallonie visant à institutionnaliser les assemblées citoyennes et conseils citoyens,déposée par Madame Schyns (Doc. 223 (2019-2020) N° 1)
Rapporteur : Monsieur Sahli
Proposition de décret spécial modifiant les articles 2,6 et 7 du décret spécial du 19 juillet 2018 instituant la consultation populaire en vue d octroyer un droit d initiative aux commissions délibératives composées de députés et de citoyens tirés au sort,déposée par Madame Schyns,Messieurs Desquesnes,Antoine et Bastin (Doc. 278 (2020-2021) N° 1)
Désignation d un Rapporteur 
discussion - Votes
' );

commit;

select * from brol;

当我执行下一个查询时:

select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)') from brol;

我得到的结果是:

Doc. 221

这是第一步,我很高兴找到它... 但是我还需要得到回报:

Doc. 222 
Doc. 223
Doc. 278 

我不能同时拥有全部三个。 您能帮我找到我在regexp_substr中忘记的内容吗?

select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)',1,1) from brol;

文档。 221

select REGEXP_SUBSTR(br,2) from brol;

文档。 222

select REGEXP_SUBSTR(br,3) from brol;

文档。 223

select REGEXP_SUBSTR(br,4) from brol;

文档。 278

有没有办法知道我会找到多少? ==>不可能。.

我发现了带有函数https://stackoverflow.com/a/23683522/10710461

方法
create or replace function regexp_substr_mr (

p_data Clob, p_re varchar ) 返回varchar为 v_cnt号; v_results varchar(4000); 开始 v_cnt:= regexp_count(p_data,p_re,1,'m'); 如果v_cnt

返回v_results; 结束;

但是我无法适应它...

Thx,

RD

解决方法

您的查询正确,只需使用SELECT DATETIME_FORMAT(CAST('2020-04-05' AS DATE),'dd/MM/YYYY') AS "date"; date ------------------ 05/04/2020 即可查找所有内容,

connect by
,

有没有办法知道我会发现多少?

使用REGEXP_COUNT

SELECT REGEXP_COUNT( br,'Doc\.\s+\d+' ) AS num_docs
FROM   brol;

哪个输出:

| NUM_DOCS |
| -------: |
|        4 |

您的函数似乎将输出由CR-NL分隔的文档列表。相反,您可以使用:

SELECT RTRIM(
         REGEXP_REPLACE( br,'.*?(Doc\.\s+\d+\.?|$)','\1' || CHR(13) || CHR(10),1,'n' ),CHR(13) || CHR(10)
       ) AS docs
FROM   brol

哪个输出:

| DOCS     |
| :------- |
| Doc. 221 |
| Doc. 222 |
| Doc. 223 |
| Doc. 278 |
| :------- |

如果您希望这些值位于不同的行中(并且brol表中可以有多个行),则可以使用:

WITH docs ( br,doc,lvl,num_docs ) AS (
  SELECT br,REGEXP_SUBSTR( br,'Doc\.\s+\d+\.?',1 ),REGEXP_COUNT( br,'Doc\.\s+\d+\.?' )
  FROM   brol
UNION ALL
  SELECT br,lvl + 1 ),lvl + 1,num_docs
  FROM   docs
  WHERE  lvl < num_docs
)
SELECT doc
FROM   docs
WHERE  lvl <= num_docs;

哪个输出:

| DOC      |
| :------- |
| Doc. 221 |
| :------- |
| Doc. 222 |
| :------- |
| Doc. 223 |
| :------- |
| Doc. 278 |
| :------- |

db 提琴here

,

为简单起见,我在表中添加了另一列-ID(哪种唯一标识每一行)。

SQL> desc brol
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 BR                                                 VARCHAR2(4000)

我还通过修改您发布的INSERT向表中添加了另一行;它包含两个“文档”。值。

最后,这样的查询可能会返回您想要的内容:

SQL> select id,2    regexp_substr(br,'Doc\.\s+\d+.?',column_value) result
  3  from brol cross join table(cast(multiset(select level from dual
  4                                           connect by level <= regexp_count(br,'Doc\.')
  5                                          ) as sys.odcinumberlist))
  6  order by id,result;

        ID RESULT
---------- ----------
         1 Doc. 221
         1 Doc. 222
         1 Doc. 223
         1 Doc. 278
         2 Doc. 666
         2 Doc. 777

6 rows selected.

SQL>
,

功能完美。.我的电话不是...

select regexp_substr_mr(br,'Doc. ([[:alnum:]]+\.?)' ) from brol;

正在工作。 谢谢大家的回答。我将检查究竟是什么“连接”选项,因为我不知道。我在包装中,因此添加功能很容易。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?