פוסט זה מהווה המשך לפוסט הקודם בנושא. בחלק זה נכיר את העבודה הבסיסית עם הפונקציות – regexp_instr, regexp_substr,regexp_replace

regexp_instr

פונקציה זו, הפועלת בצורה דומה לפונקציית ה instr מחזירה מיקום של ביטוי בתוך טקסט.

נייצר טבלת דמו לפי הסינטקס הבא :

 CREATE TABLE names

  AS

  SELECT rownum AS ID, last_name AS NAME

  FROM hr.employees ;

Table created


ונציג את מיקום התו
't' בחמשת העובדים הראשונים

 SELECT name , regexp_instr(name ,'t')

  FROM names

  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'T')

------------------------- ----------------------

Abel                                           0

Ande                                           0

Atkinson                                       2

Austin                                         4

Baer                                           0

 

נציג את מיקום התו 'e' בחמשת העובדים הראשונים



 SELECT name , regexp_instr(name ,'e')

  FROM names

  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'E')

------------------------- ----------------------

Abel                                           3

Ande                                           4

Atkinson                                       0

Austin                                         0

Baer                                           3

נציג את מיקום הרצף 'ae'



 SELECT name , regexp_instr(name ,'ae')

  FROM names

  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'AE')

------------------------- -----------------------

Abel                                            0

Ande                                            0

Atkinson                                        0

Austin                                          0

Baer                                            2

נשתמש ב '[ ]' כדי להציג את מיקום התווים 'a' או 'e'



 SELECT name , regexp_instr(name ,'[ae]')

  FROM names

  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'[AE]')

------------------------- -------------------------

Abel                                              3

Ande                                              4

Atkinson                                          0

Austin                                            0

Baer                                              2

נציג שוב את מיקום התווים 'a' או 'e' כך ש

·       בעמודה הראשונה – החיפוש יעשה החל מהתו הראשון

·       בעמודה השניה – החיפוש יעשה החל מהתו הרביעי



 SELECT  id,

     name ,

     regexp_instr(name ,'[ae]')   AS COL_1,

     regexp_instr(name ,'[ae]',4) AS COL_2

  FROM names

  WHERE id BETWEEN 10 AND 20 ;

        ID NAME                       COL_1  COL_2

---------- ------------------------- ------ ------

        10 Bernstein                          7

        11 Bissot                         0      0

        12 Bloom                          0      0

        13 Bull                           0      0

        14 Cabrio                             0

        15 Cambrault                          6

        16 Cambrault                          6

        17 Chen                               0

        18 Chung                          0      0

        19 Colmenares                         5

        20 Davies                             5

11 rows selected.

נציג שוב את מיקום התווים 'a' או 'e' כך ש

·       בעמודה הראשונה – החיפוש יעשה החל מהתו הראשון

·       בעמודה השניה – החיפוש יעשה החל מהתו הרביעי

·       בעמודה השלישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e'



 SELECT    id,

     name ,

     regexp_instr(name ,'[ae]')     AS COL_1,

     regexp_instr(name ,'[ae]',4)   AS COL_2,

     regexp_instr(name ,'[ae]',4,2) AS COL_3

  FROM names

  WHERE id BETWEEN 10 AND 20 ;

        ID NAME                       COL_1  COL_COL_3

---------- ------------------------- ------ ------ ------

        10 Bernstein                              0

        11 Bissot                         0      0      0

        12 Bloom                          0      0      0

        13 Bull                           0      0      0

        14 Cabrio                             0      0

        15 Cambrault                              0

        16 Cambrault                              0

        17 Chen                               0      0

        18 Chung                          0      0      0

        19 Colmenares                             7

        20 Davies                                 0

11 rows selected.

נמשיך לפתח את הקוד ונציג שוב את מיקום התווים 'a' או 'e' כך ש

·       בעמודה הראשונה – החיפוש יעשה החל מהתו הראשון

·       בעמודה השניה – החיפוש יעשה החל מהתו הרביעי

·       בעמודה השלישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e'

·       בעמודה הרביעית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e' (הדיפולט, זהה לעמודה הקודמת)

·       בעמודה החמישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני + 1 של התווים 'a' או 'e'

·       בעמודה השישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e' כאשר החיפוש עצמו לא יהיה Case Sensitive



 SELECT  id,

     name ,

             regexp_instr(name ,'[ae]')              AS COL_1,

             regexp_instr(name ,'[ae]',4)            AS COL_2,

             regexp_instr(name ,'[ae]',4,2)          AS COL_3,

             regexp_instr(name ,'[ae]',4,2,0)        AS COL_4,

             regexp_instr(name ,'[ae]',4,2,1)        AS COL_5,

  8             regexp_instr(name ,'[ae]',4,2,0, 'i')   AS COL_6

  9  FROM names

 10  WHERE id BETWEEN 10 AND 20 ;

        ID NAME         COL_1  COL_COL_COL_COL_COL_6

---------- ----------- ------ ------ ------ ------ ------ ------

        10 Bernstein                0      0      0      0

        11 Bissot           0      0      0      0      0      0

        12 Bloom            0      0      0      0      0      0

        13 Bull             0      0      0      0      0      0

        14 Cabrio               0      0      0      0      0

        15 Cambrault                0      0      0      0

        16 Cambrault                0      0      0      0

        17 Chen                 0      0      0      0      0

        18 Chung            0      0      0      0      0      0

        19 Colmenares                       8      7

        20 Davies                   0      0      0      0

11 rows selected.

regexp_substr

פונקציה זו הפועלת בדומה לפונקציית ה substr מחזירה תת מחרוזת מתוך טקסט.

נייצר טבלת דמו ונאכלס אותה לפי הסינטקס הבא :

 DROP TABLE text ;

Table dropped.

 CREATE TABLE text

  (text_col varchar2(50)) ;

Table created.

 INSERT INTO text VALUES ('text 324 text 45321 text 12232');

1 row created.

 SELECT *

  FROM text ;

TEXT_COL

--------------------------------------------------

text 324 text 45321 text 12232

נציג את הספרה הראשונה מתוך הטקסט



 SELECT regexp_substr(text_col , '[0-9]') AS COL_1

  FROM text ;

COL_1

--------------------------------------------------

3

נציג את שתי הספרות הראשונות מתוך הטקסט



 SELECT regexp_substr(text_col , '[0-9]{2}') AS COL_1

  FROM text ;

COL_1

--------------------------------------------------

32

ניתן להשתמש בסימן ה '+' כדי להציג את כל הספרות הקיימות במופע הראשון



 SELECT regexp_substr(text_col , '[0-9]+') AS COL_1

  FROM text ;

COL_1

--------------------------------------------------

324

ננחה את חיפוש הספרות להתבצע החל מהמיקום ה 9



 SELECT regexp_substr(text_col , '[0-9]+' , 9) AS COL_1

  FROM text ;

COL_1

------------------------------------------

45321

ננחה את חיפוש הספרות להתבצע החל מהמיקום ה 9 ולהחזיר את מופע הספרות הראשון (זהה לדוגמא הקודמת)



 SELECT regexp_substr(text_col , '[0-9]+' , 9 , 1) AS COL_1

  FROM text ;

COL_1

------------------------------------------

45321

ננחה את חיפוש הספרות להתבצע החל מהמיקום ה 9 ולהחזיר את מופע הספרות השני



 SELECT regexp_substr(text_col , '[0-9]+' , 9 , 2) AS COL_1

  FROM text ;

COL_1

------------------------------------------

12232



regexp_replace

לסיום נעשה היכרות בסיסית עם פונקצית ה regexp_replace אשר בדומה לפונצקית ה replace מבצעת החלפות ביטויים בתוך מחרוזת.

 SELECT * FROM text ;

TEXT_COL

------------------------------

text 324 text 45321 text 12232

בדוגמא זו אנו מחליפים את כל האותיות בסימן ה '$'



 SELECT regexp_replace(text_col , '[a-z]' , '$') AS COL_1

  FROM text ;

COL_1

------------------------------

$$$$ 324 $$$$ 45321 $$$$ 12232

בדוגמא הבאה אנו מחליפים את כל האותיות בסימן ה '$' החל מהתו התשיעי



 SELECT regexp_replace(text_col , '[a-z]' , '$' , 9) AS COL_1

  FROM text ;

COL_1

------------------------------

text 324 $$$$ 45321 $$$$ 12232