Home > other >  extract data sql
extract data sql

Time:11-09

Example: Below is the string(sentence) in field and I want to extract the specific data from the below patterns using select query in different fields:

i )

Input : /a03/infor/current/server/infa_sh/ScriptFil/infa_common/adap_main 'FI_RE_PRJ' 'wf_RE_ACC_TIE_HIS_MNT_EN_AM'

Output : Select query to fetch FI_RE_PRJ and wf_RE_ACC_TIE_HIS_MNT_EN_AM

Other pattern I have is :

Input :

$SCRIPTS/run_in.ksh -f FI_FLE_PRJ -wait wf_FI_SV_CNCL_RP_BAS_KF

Output : Select query to fetch FI_FLE_PRJ and wf_FI_SV_CNCL_RP_BAS_KF from input

CodePudding user response:

We can try using REGEXP_SUBSTR with a capture group:

SELECT
    REGEXP_SUBSTR(col, '''(.*?)''', 1, 1, NULL, 1) AS first,
    REGEXP_SUBSTR(col, '''(.*?)''', 1, 2, NULL, 1) AS second
FROM yourTable;

CodePudding user response:

You can use simple string functions (which are much faster than regular expressions):

SELECT SUBSTR( value, pos1   1, pos2 - pos1 - 1 ) AS quote1,
       SUBSTR( value, pos3   1, pos4 - pos3 - 1 ) AS quote2
FROM   (
  SELECT value,
         INSTR(value, '''', 1, 1) AS pos1,
         INSTR(value, '''', 1, 2) AS pos2,
         INSTR(value, '''', 1, 3) AS pos3,
         INSTR(value, '''', 1, 4) AS pos4
  FROM   table_name
)

Which, for the sample data:

CREATE TABLE table_name (value) AS
SELECT '/a03/infor/current/server/infa_sh/ScriptFil/infa_common/adap_main ''FI_RE_PRJ'' ''wf_RE_ACC_TIE_HIS_MNT_EN_AM''' FROM DUAL;

Outputs:

QUOTE1 QUOTE2
FI_RE_PRJ wf_RE_ACC_TIE_HIS_MNT_EN_AM

fiddle

  • Related