์นดํ…Œ๊ณ ๋ฆฌ:

๋ฌธ์ž์—ด ํ•จ์ˆ˜(์ •๊ทœ์‹)

[ NOT ] REGEXPยถ

๋ฌธ์ž์—ด์ด ์ง€์ •๋œ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์ž…๋ ฅ ๋ชจ๋‘ ํ…์ŠคํŠธ ์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

REGEXP๋Š” [ NOT ] LIKE ํ•จ์ˆ˜์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, SQL LIKE ํŒจํ„ด ๊ตฌ๋ฌธ ๋Œ€์‹  POSIX ํ™•์žฅ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” LIKE๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ์ผ์น˜ ์กฐ๊ฑด์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๊ฒ€์ƒ‰ ์ตœ์ ํ™” ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฒ€์ƒ‰ ์ตœ์ ํ™” ์„œ๋น„์Šค ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ณ„์นญ:

[ NOT ] RLIKE (๋‘ ๋ฒˆ์งธ ๊ตฌ๋ฌธ)

๋ฌธ์ž์—ด ํ•จ์ˆ˜(์ •๊ทœ์‹) ํ•ญ๋ชฉ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ตฌ๋ฌธยถ

<subject> [ NOT ] REGEXP <pattern>
Copy

์ธ์žยถ

ํ•„์ˆ˜:

subject

์ผ์น˜ ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•  ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

pattern

์ผ์น˜ํ•  ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

ํŒจํ„ด ์ง€์ •์— ๊ด€ํ•œ ์ง€์นจ์€ ๋ฌธ์ž์—ด ํ•จ์ˆ˜(์ •๊ทœ์‹) ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฐ˜ํ™˜ยถ

BOOLEAN ๋˜๋Š” NULL์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • REGEXP๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด FALSE๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • NOT REGEXP๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด FALSE๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • REGEXP ๋˜๋Š” NOT REGEXP๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ ์ธ์ž๊ฐ€ NULL์ด๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

๋ฐ์ดํ„ฐ ์ •๋ ฌ ์„ธ๋ถ€ ์ •๋ณดยถ

Arguments with collation specifications currently arenโ€™t supported.

์˜ˆยถ

์•„๋ž˜ ์˜ˆ๋Š” ๊ฐ„๋‹จํ•œ ์™€์ผ๋“œ์นด๋“œ ์‹๊ณผ ํ•จ๊ป˜ REGEXP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

CREATE OR REPLACE TABLE strings (v VARCHAR(50));
INSERT INTO strings (v) VALUES
  ('San Francisco'),
  ('San Jose'),
  ('Santa Clara'),
  ('Sacramento');
Copy

์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT v
  FROM strings
  WHERE v REGEXP 'San* [fF].*'
  ORDER BY v;
Copy
+---------------+
| V             |
|---------------|
| San Francisco |
+---------------+

๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž \ ๋Š” ์ •๊ทœ์‹์˜ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž์ด๋ฉฐ ํŠน์ˆ˜ ๋ฌธ์ž ๋˜๋Š” ๋ฌธ์ž ๊ทธ๋ฃน์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด \s ๋Š” ๊ณต๋ฐฑ์— ๋Œ€ํ•œ ์ •๊ทœ์‹์ž…๋‹ˆ๋‹ค.

๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” Snowflake ๋ฌธ์ž์—ด ํŒŒ์„œ๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ ๋˜ํ•œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฑ์Šฌ๋ž˜์‹œ๋Š” ํƒญ ๋ฌธ์ž๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž ์‹œํ€€์Šค์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ผ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด 2 ๊ฐœ์˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์ž…๋ ฅ ๋ฌธ์˜ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅ์˜ ํ•ด๋‹น ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

INSERT INTO strings (v) VALUES
  ('Contains embedded single \\backslash');
Copy
SELECT *
  FROM strings
  ORDER BY v;
Copy
+-------------------------------------+
| V                                   |
|-------------------------------------|
| Contains embedded single \backslash |
| Sacramento                          |
| San Francisco                       |
| San Jose                            |
| Santa Clara                         |
+-------------------------------------+

์ด ์˜ˆ๋Š” San ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ San ์€ ์™„์ „ํ•œ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค(์˜ˆ: Santa ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹˜). \b ๋Š” ๋‹จ์–ด ๊ฒฝ๊ณ„์˜ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค์ž…๋‹ˆ๋‹ค.

SELECT v, v REGEXP 'San\\b.*' AS matches
  FROM strings
  ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | False   |
| Sacramento                          | False   |
| San Francisco                       | True    |
| San Jose                            | True    |
| Santa Clara                         | False   |
+-------------------------------------+---------+

์ด ์˜ˆ๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ๋’ค์— ์˜ค๋Š” ๊ณต๋ฐฑ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ํ•  ๋‹จ์ผ ๋ฐฑ์Šฌ๋ž˜์‹œ๋Š” ์•„๋ž˜์— 4 ๊ฐœ์˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. REGEXP๊ฐ€ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ํ•ด๋‹น ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ 2๊ฐœ์˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ํŒŒ์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์‹์ด ๊ฒ€์ƒ‰ํ•˜๋Š” 1๊ฐœ์˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 4๊ฐœ์˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ์‹์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

SELECT v, v REGEXP '.*\\s\\\\.*' AS matches
  FROM strings
  ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+

๋‹ค์Œ ์˜ˆ๋Š” ๋ฌธ์ž์—ด์ด ๋ฆฌํ„ฐ๋Ÿด์ด๋ž€ ์  ๋ฐ ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋กœ ํ•ด์„๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ์ ์„ ๋ฌธ์ž์—ด ํŒŒ์„œ์— ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด $$ ๋ฅผ ๋ฌธ์ž์—ด ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์•ž์˜ ์˜ˆ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. (๋ฐฑ์Šฌ๋ž˜์‹œ๋Š” ์—ฌ์ „ํžˆ REGEXP์— ์˜ํ•ด ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.)

SELECT v, v REGEXP $$.*\s\\.*$$ AS MATCHES
  FROM strings
  ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+