자격증/SQLD

[SQL ν™œμš©] μ •κ·œ ν‘œν˜„μ‹

_silver 2025. 11. 9. 07:20

1. μ •κ·œ ν‘œν˜„μ‹

- λ¬Έμžμ—΄ →(κ³΅ν†΅λœ νŠΉμ§•)→ μΌλ°˜ν™”ν•˜λŠ” κ·œμΉ™

- μ •κ·œ ν‘œν˜„μ‹ ν•¨μˆ˜(REGEXP_ν•¨μˆ˜): ex. REGEXP_INSTR, REGEXP_SUBSTR...

- μ •κ·œ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λ©΄ 쒋은 이유

ex. μΌλ°˜ν™” κ·œμΉ™ μ°Ύμ•„λ‚΄κΈ°

β‘  MY34

β‘‘ B123TT

β‘’ 456789B

β‘£ ME!!!

β‘€ ABCDE

→ 숫자,문자 λͺ¨λ‘ 포함: β‘ , β‘‘, β‘’

→ 숫자 3개 이상 연속적: β‘‘, β‘’

→ μ˜ˆμ‹œμ˜ 경우 곡톡 νŒ¨ν„΄μ˜ λ¬Έμžμ—΄μ΄ 2개 밖에 μ—†μ–΄μ„œ 직접 μ§€μ •ν•  수 μžˆμ§€λ§Œ, μ—¬λŸ¬κ°œμΈ 경우 일일히 μ§€μ •ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆμ–΄ μ •κ·œ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λ©΄ 더 νŽΈλ¦¬ν•¨.

 


2. μ •κ·œμ‹ ν‘œν˜„ μ’…λ₯˜

- μ†Œλ¬Έμž, λŒ€λ¬Έμž 주의

μ’…λ₯˜ 의미 μ˜ˆμ‹œ
\d
[:digit:]
[0-9]
Digit, 0, 1, 2, ..., 9  
\D μˆ«μžκ°€ μ•„λ‹Œ 것  
\s 곡백  
\t Tab  
\n New line(μ—”ν„° 문자)  
\w κΈ€μž(숫자, 영·κ΅­λ¬Έμž, (_)) REGEXP_REPLACE('aA!23수 λŠ₯._-', \w, ' ') → !  .-
\W 곡백, (_) μ œμ™Έν•œ 특수기호 REGEXP_REPLACE('aA!23수 λŠ₯._-', \W, ' ') → aA23수λŠ₯_
^ μ‹œμž‘λ˜λŠ” κΈ€μž a둜 μ‹œμž‘ν•˜λŠ” → ^a
$ λ§ˆμ§€λ§‰ κΈ€μž 숫자둜 λλ‚˜λŠ”  → \d$
\ 뒀에 기호 의미 제거 '(1234...에 μžˆλŠ” '(' μ°ΎκΈ° ^( →^\(
- ()은 κ·Έλ£Ή μ§€μ •ν•˜λŠ” μ •κ·œ ν‘œν˜„μ‹ 쀑 μΌλΆ€μ΄λ―€λ‘œ \을 μ‚¬μš©ν•˜λ©° 뒀에 기호의 의미λ₯Ό 제거 ν•œλ‹€. (ex. μ „ν™”λ²ˆν˜Έ)
() κ·Έλ£Ή μ§€μ •  
| λ˜λŠ” abc
a123
b123
a λ˜λŠ” b둜 μ‹œμž‘ μ°ΎκΈ° → ^(a|b)
. μ—”ν„°λ₯Ό μ œμ™Έν•œ λͺ¨λ“  ν•œκΈ€μž(숫자, 문자, 곡백, 특수기호 포함) ^a.+ → a둜 μ‹œμž‘ν•˜λ©΄μ„œ 뒀에 μ–΄λ–€κ²Œ 와도 상관 μ—†μŒ(.+)
+ 연속적(μ—¬λŸ¬κ°œ)   
[abc] a λ˜λŠ” bλ˜λŠ” c
- λŒ€κ΄„ν˜Έ ν•˜λ‚˜λ‹Ή 'ν•œκΈ€μž'
^[abc] → a λ˜λŠ” bλ˜λŠ” c둜 μ‹œμž‘ν•˜λŠ” 문자 μ°ΎκΈ°
i+
i*
i?
iκ°€ 1회 이상 반볡
iκ°€ 0회 이상 반볡
0νšŒμ—μ„œ 1회 반볡
iλ₯Ό ν¬ν•¨ν•œ
iλ₯Ό λ―Έν¬ν•¨ν•œ
iλ₯Ό ν¬ν•¨ν•˜κ±°λ‚˜, 미포함 ν•˜κ±°λ‚˜
i{n}
i{n1, n2}
i[n, ]
iκ°€ n회 반볡
iκ°€ n1μ—μ„œ n회 반볡
iκ°€ n회 이상 반볡
b[4] → bbbb
b[2,4] → bb \n bbbb
b[2,] → bb
[:punct:] 특수문자  
[:alnum:] λ¬Έμžμ™€ 숫자  
[:print:] 숫자, 문자, 특수문자, 곡백 λͺ¨λ‘  

3. μ •κ·œμ‹ ν‘œν˜„ ν•¨μˆ˜

1) REGEXP_REPLACE

- μ •κ·œμ‹ ν‘œν˜„μ„ μ‚¬μš©ν•œ(REGEXP_) λ¬Έμžμ—΄ μΉ˜ν™˜, μ‚­μ œ κ°€λŠ₯(REPLACE)

- 문법

REGEXP_REPLACE(λŒ€μƒ, 찾을 λ¬Έμžμ—΄, [λ°”κΏ€ λ¬Έμžμ—΄], [검색 μœ„μΉ˜], [발견 횟수], [μ˜΅μ…˜])
→ λŒ€μƒμ—μ„œ μ–΄λ–€κ±Έ μ°Ύμ•„μ„œ, μ–΄λ–»κ²Œ λ°”κΏ€λž˜, λͺ‡ 번째 μœ„μΉ˜μ—μ„œ, λͺ‡ 번째둜 λ°œκ²¬λ˜λŠ” 것을 μΉ˜ν™˜(|μ‚­μ œ) ν• λž˜?

- [λ°”κΏ€ λ¬Έμžμ—΄] : μƒλž΅μ‹œ μ‚­μ œ
- [검색 μœ„μΉ˜] : μƒλž΅μ‹œ 1
- [발견 횟수] : μƒλž΅μ‹œ 0(λͺ¨λ“ κ²ƒ) 
- [μ˜΅μ…˜] : 
c(κΈ°λ³Έ) → λŒ€μ†Œ κ΅¬λΆ„ν•˜μ—¬ 검색
i → λŒ€μ†Œ κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  검색 (= [A-z]) (= [a - zA-Z]
m → νŒ¨ν„΄μ„ λ‹€μ€‘λΌμΈμœΌλ‘œ μ„ μ–Έ κ°€λŠ₯

 

2) REGEXP_SUBSTR

- μ •κ·œμ‹ ν‘œν˜„μ„ μ‚¬μš©ν•œ(REGEXP_) λ¬Έμžμ—΄ μΆ”μΆœ(SUBSTR)

- 문법

REGEXP_SUBSTR(λŒ€μƒ, νŒ¨ν„΄, [검색 μœ„μΉ˜], [발견 횟수], [μ˜΅μ…˜], [μΆ”μΆœ κ·Έλ£Ή])
→ λŒ€μƒμ„ μ–΄λ–€ νŒ¨ν„΄μ„ κ°€μ§€λ‘œ μžˆλŠ”, μ–΄λ””μ—μ„œ λΆ€ν„°, λͺ‡ 번째둜 λ°œκ²¬λ˜λŠ” [μ˜΅μ…˜: null] 그룹을 찾을 κΊΌμ•Ό? 

- [검색 μœ„μΉ˜] : μƒλž΅μ‹œ 1
- [발견 횟수] : μƒλž΅μ‹œ 1
- [μ˜΅μ…˜] : REGEXP_REPLACE()와 동일
- [μΆ”μΆœ κ·Έλ£Ή] : μ„œλΈŒ νŒ¨ν„΄ 번호

 

3) REGEXP_INSTR

- μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ—μ„œ νŠΉμ • νŒ¨ν„΄μ˜ μ‹œμž‘ μœ„μΉ˜ λ°˜ν™˜

- 문법

REGEXP_INSTR(λŒ€μƒ, 찾을 νŒ¨ν„΄, [μ‹œμž‘ μœ„μΉ˜], [발견 횟수], [좜λ ₯ μ˜΅μ…˜], [μ˜΅μ…˜], [μΆ”μΆœ κ·Έλ£Ή])
→ λŒ€μƒμ—μ„œ μ–΄λ–€ νŒ¨ν„΄μ„ κ°€μ§€κ³  μžˆλŠ” μ–΄λ””μ—μ„œ λΆ€ν„° μ‹œμž‘ ν•˜λŠ” λͺ‡ 번째둜 λ°œκ²¬λ˜λŠ” [μ‹œμž‘μœ„μΉ˜|λμœ„μΉ˜] κ°’ λ°˜ν™˜

- [μ‹œμž‘ μœ„μΉ˜] : μƒλž΅μ‹œ 1
- [발견 횟수] : μƒλž΅μ‹œ 처음 발견된 λ¬Έμžμ—΄ μœ„μΉ˜ 리턴
- [좜λ ₯ μ˜΅μ…˜] : 
 0(κΈ°λ³Έκ°’) : λ¬Έμžμ—΄μ˜ μ‹œμž‘μœ„μΉ˜ 리턴
 1 : λ¬Έμžμ—΄μ˜ λμœ„μΉ˜ 리턴
ex. 12abc34 → abcλ₯Ό μ°Ύκ³  μ‹Άμ„λ•Œ: 0이면 'a' / 1이면 'c'λ₯Ό 찾음

 

 

4) REGEXP_LIKE

- μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ—μ„œ νŠΉμ • νŒ¨ν„΄μ„ κ°–λŠ” 경우 λ°˜ν™˜

- WHERE절 μ‚¬μš©

- 문법

REGEXP_LIKE(λŒ€μƒ, 찾을 λ¬Έμžμ—΄, [μ˜΅μ…˜])
→ λŒ€μƒμ—μ„œ μ–΄λ–€ κ±Έ 찾을 κΊΌμ•Ό?

- [μ˜΅μ…˜] : 
REGEXP_REPLACE()와 동일

 

5) REGEXP_COUNT

- μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ—μ„œ νŠΉμ • νŒ¨ν„΄μ˜ 횟수 λ°˜ν™˜

- 문법

REGEXP_COUNT(λŒ€μƒ, 찾을 λ¬Έμžμ—΄, [μ‹œμž‘ μœ„μΉ˜], [μ˜΅μ…˜])

- [μ‹œμž‘ μœ„μΉ˜] : μƒλž΅μ‹œ 1