- ์นดํ ๊ณ ๋ฆฌ:
[ NOT ] REGEXPยถ
๋ฌธ์์ด์ด ์ง์ ๋ ํจํด๊ณผ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. ๋ ์ ๋ ฅ ๋ชจ๋ ํ ์คํธ ์์ด์ด์ผ ํฉ๋๋ค.
REGEXP๋ [ NOT ] LIKE ํจ์์ ์ ์ฌํ์ง๋ง, SQL LIKE ํจํด ๊ตฌ๋ฌธ ๋์ POSIX ํ์ฅ ์ ๊ท์์ ์ฌ์ฉํฉ๋๋ค. ์ด ํจ์๋ LIKE๋ณด๋ค ๋ ๋ณต์กํ ์ผ์น ์กฐ๊ฑด์ ์ง์ํฉ๋๋ค.
ํ
๊ฒ์ ์ต์ ํ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํจ์๋ฅผ ํธ์ถํ๋ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ฒ์ ์ต์ ํ ์๋น์ค ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ๋ณ์นญ:
[ NOT ] RLIKE (๋ ๋ฒ์งธ ๊ตฌ๋ฌธ)
๋ฌธ์์ด ํจ์(์ ๊ท์) ํญ๋ชฉ๋ ์ฐธ์กฐํ์ญ์์ค.
๊ตฌ๋ฌธยถ
<subject> [ NOT ] REGEXP <pattern>
์ธ์ยถ
ํ์:
subject
์ผ์น ํญ๋ชฉ์ ๊ฒ์ํ ๋ฌธ์์ด์ ๋๋ค.
pattern
์ผ์นํ ํจํด์ ๋๋ค.
ํจํด ์ง์ ์ ๊ดํ ์ง์นจ์ ๋ฌธ์์ด ํจ์(์ ๊ท์) ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ฐํยถ
BOOLEAN ๋๋ NULL์ ๋ฐํํฉ๋๋ค.
REGEXP๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ๊ฐ์ TRUE์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด FALSE๋ฅผ ๋ฐํํฉ๋๋ค.
NOT REGEXP๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ๊ฐ์ TRUE์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด FALSE๋ฅผ ๋ฐํํฉ๋๋ค.
REGEXP ๋๋ NOT REGEXP๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์ธ์๊ฐ NULL์ด๋ฉด NULL์ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ๋ฒ ๋ ธํธยถ
์ด ํจ์๋ ์์์ ์ผ๋ก ํจํด์ ์์ชฝ ๋์ ๊ณ ์ ํฉ๋๋ค(์:
''
๋ ์๋์ผ๋ก'^$'
๊ฐ ๋๊ณ'ABC'
๋ ์๋์ผ๋ก'^ABC$'
๊ฐ ๋จ). ABC๋ก ์์ํ๋ ๋ฌธ์์ด์ ์ฐพ์ผ๋ ค๋ฉด ํจํด์'ABC.*'
๊ฐ ๋ฉ๋๋ค.๋ฐฑ์ฌ๋์ ๋ฌธ์(
\
)๋ ์ด์ค์ผ์ดํ ๋ฌธ์์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์์๋ฐ์ดํ๋ก ๋ฌถ์ธ ๋ฌธ์์ด ์์์์ ์ ๊ท์ ์ง์ ํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.๋ ๋ง์ ์ฌ์ฉ๋ฒ ๋ ธํธ๋ ์ ๊ท์ ํจ์์ ๋ํ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ๋ฒ ๋ ธํธ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ฐ์ดํฐ ์ ๋ ฌ ์ธ๋ถ ์ ๋ณดยถ
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');
์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํ์ฌ ํจํด์ ๊ฒ์ํฉ๋๋ค.
SELECT v
FROM strings
WHERE v REGEXP 'San* [fF].*'
ORDER BY v;
+---------------+
| V |
|---------------|
| San Francisco |
+---------------+
๋ฐฑ์ฌ๋์ ๋ฌธ์ \
๋ ์ ๊ท์์ ์ด์ค์ผ์ดํ ๋ฌธ์์ด๋ฉฐ ํน์ ๋ฌธ์ ๋๋ ๋ฌธ์ ๊ทธ๋ฃน์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด \s
๋ ๊ณต๋ฐฑ์ ๋ํ ์ ๊ท์์
๋๋ค.
๋ฆฌํฐ๋ด ๋ฌธ์์ด์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ Snowflake ๋ฌธ์์ด ํ์๋ ๋ฐฑ์ฌ๋์ ๋ํ ์ด์ค์ผ์ดํ ๋ฌธ์๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฑ์ฌ๋์๋ ํญ ๋ฌธ์๋ฅผ ์ง์ ํ๋ ๋ฌธ์ ์ํ์ค์ ์ผ๋ถ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋จ์ผ ๋ฐฑ์ฌ๋์๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด์ ์์ฑํ๋ ค๋ฉด 2 ๊ฐ์ ๋ฐฑ์ฌ๋์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ ์ ๋ ฅ ๋ฌธ์ ๋ฌธ์์ด์ ์ถ๋ ฅ์ ํด๋น ๋ฌธ์์ด๊ณผ ๋น๊ตํฉ๋๋ค.
INSERT INTO strings (v) VALUES
('Contains embedded single \\backslash');
SELECT *
FROM strings
ORDER BY v;
+-------------------------------------+
| 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;
+-------------------------------------+---------+
| 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;
+-------------------------------------+---------+
| 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;
+-------------------------------------+---------+
| V | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True |
| Sacramento | False |
| San Francisco | False |
| San Jose | False |
| Santa Clara | False |
+-------------------------------------+---------+