פוסט זה מהווה המשך לפוסט הקודם בנושא. בחלק זה נכיר את העבודה הבסיסית עם הפונקציות – 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