gpt4 book ai didi

sql - 使用 Oracle SQL 检索字符串中的特定字符串

转载 作者:行者123 更新时间:2023-12-02 07:43:05 24 4
gpt4 key购买 nike

我正在尝试使用 Oracle SQL 11g R2 进行以下字符串搜索:

数据是:

| CN=aXYZApple-Au,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com | CN=31107427,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=com | CN=ea90045052,OU=Groups,OU=eProfile,DC=core,DC=dir,DC=abc,DC=com | CN=S0901448,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=com | CN=00900887,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=com | CN=NSMMMM,OU=LRP,OU=Groups,DC=core,DC=dir,DC=abc,DC=com | CN=aXYZApple-Readonly,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com | CN=WWSWW-Au,OU=LRP,OU=Groups,DC=core,DC=dir,DC=abc,DC=com | CN=aLogical_RW,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com | CN=aXYZApple-Write,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |

从上面的数据中,我需要获取所有包含字符串“aXYZApple”的字符串,并且仅将“OU=Managed”作为该字符串匹配的第二部分。

所以基于以上,下面的结果就是我所追求的并且只会显示:

aXYZApple-Au
aXYZApple-Readonly
aXYZApple-Write

正在使用 Oracle regexp_like/regexp_replace。

最佳答案

你可以使用 regexp_substr将输入数据拆分成行,然后查找相关字符串,例如:

SQL> SELECT regexp_substr(line, 'aXYZApple[^,]*') subtxt
2 FROM (SELECT regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line
3 FROM dual
4 CONNECT BY LEVEL <= length(:x) - length(REPLACE(:x, '|', '')))
5 WHERE regexp_substr(line || ',', '[^,]*,', 1, 2) = 'OU=Managed,'
6 AND line LIKE '%aXYZApple%';

SUBTXT
--------------------------------------------------------------------------------
aXYZApple-Au
aXYZApple-Readonly
aXYZApple-Write

这里有一点解释。您必须逐步完成查询。

查询的内部部分将遍历您的数据(对于每个 |):

SQL> SELECT regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line
2 FROM dual
3 CONNECT BY LEVEL <= length(:x) - length(REPLACE(:x, '|', ''));

LINE
--------------------------------------------------------------------------------
CN=aXYZApple-Au,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
CN=31107427,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=
CN=ea90045052,OU=Groups,OU=eProfile,DC=core,DC=dir,DC=abc,DC=com |
CN=S0901448,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=
CN=00900887,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=
CN=NSMMMM,OU=LRP,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
CN=aXYZApple-Readonly,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
CN=WWSWW-Au,OU=LRP,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
CN=aLogical_RW,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
CN=aXYZApple-Write,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |

然后您将在第二个位置循环查找 OU=Managed 字符串:

SQL> SELECT regexp_substr(line || ',', '[^,]*,', 1, 2) second_part
2 FROM (SELECT regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line
3 FROM dual
4 CONNECT BY LEVEL <= length(:x) - length(REPLACE(:x, '|', '')));

SECOND_PART
--------------------------------------------------------------------------------
OU=Managed,
OU=Distribution Lists,
OU=Groups,
OU=Distribution Lists,
OU=Distribution Lists,
OU=LRP,
OU=Managed,
OU=LRP,
OU=Managed,
OU=Managed,

最后,选择带有最后一个regexp_substr的相关部分。

关于sql - 使用 Oracle SQL 检索字符串中的特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com