regex - Retrieving Certain Strings within a String using Oracle SQL -
regex - Retrieving Certain Strings within a String using Oracle SQL -
hoping can assist next string search using oracle sql 11g r2:
data is:
| 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 |
from above data, need obtain strings hold string "axyzapple" "ou=managed" sec part of string match.
so based on above, next results after , displayed only:
axyzapple-au axyzapple-readonly axyzapple-write
am using oracle regexp_like/regexp_replace.
you utilize regexp_substr
split input info lines , relevant strings, example:
sql> select regexp_substr(line, 'axyzapple[^,]*') subtxt 2 (select regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line 3 dual 4 connect level <= length(:x) - length(replace(:x, '|', ''))) 5 regexp_substr(line || ',', '[^,]*,', 1, 2) = 'ou=managed,' 6 , line '%axyzapple%'; subtxt -------------------------------------------------------------------------------- axyzapple-au axyzapple-readonly axyzapple-write
here's little explanation. have go through query step step.
the inner part of query loop through info (for each |
):
sql> select regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line 2 dual 3 connect 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 |
you loop ou=managed
string in sec position:
sql> select regexp_substr(line || ',', '[^,]*,', 1, 2) second_part 2 (select regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line 3 dual 4 connect 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,
finally, select relevant part lastly regexp_substr
.
sql regex oracle plsql
Comments
Post a Comment