일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- hive
- Mac
- matplotlib
- Java
- numpy
- Github
- SQL
- PostgreSQL
- Python
- Kotlin
- Google Excel
- Tkinter
- Google Spreadsheet
- string
- Apache
- dataframe
- Excel
- PANDAS
- list
- google apps script
- c#
- PySpark
- django
- array
- gas
- GIT
- Redshift
- 파이썬
- math
- Today
- Total
달나라 노트
Redshift : like & ilike (텍스트 패턴 매칭, text pattern matching) 본문
Redshift : like & ilike (텍스트 패턴 매칭, text pattern matching)
CosmosProject 2021. 7. 7. 19:49
SQL에서 어떤 패턴의 텍스트를 찾아낼 때 흔히 사용하는 operator로는 like와 ilike가 있습니다.
Syntax
some_text like 'pattern'
some_text ilike 'pattern'
Syntax는 위와 같습니다.
some_text 속에 pattern과 일치하는 부분이 있다면 True를 반환하고,
pattern과 일치하는 부분이 없다면 False를 반환합니다.
some_text는 column 이름으로 대체 가능합니다.
like와 ilike는 동일한 기능을 가지지만 차이점은 다음과 같습니다.
like = 대소문자 구분(case sensitive) (e.g. a와 A는 다르다고 판단)
ilike = 대소문자 구분 안함(case insensitive) (e.g. a와 A는 동일하다고 판단)
'apple' like 'apple' --> 1. True
'apple' ilike 'apple' --> 2. True
'apple' like 'Apple' --> 3. False
'apple' ilike 'Apple' --> 4. True
1. 별도의 pattern 기호가 없으므로 apple과 apple이 동일한지 체크합니다.
동일하므로 True를 반환합니다.
2. 1번과 마찬가지로 별도의 pattern 기호가 없으므로 apple과 apple의 동일성을 체크합니다.
동일하므로 True를 반환합니다.
3. 별도의 pattern 기호가 없으므로 apple과 Apple이 동일한지 체크합니다.
두 텍스트는 스펠링은 동일하나 a, A로 대소문자가 다르므로 like는 False를 return합니다.
4. 3번과 동일하지만 ilike는 대소문자를 구분하지 않습니다.(case insensitive)
따라서 apple과 Apple을 동일하게 보고 True를 반환합니다.
'apple' like 'app%' --> 1. True
'apple' ilike 'app%' --> 2. True
'apple' like 'App%' --> 3. False
'apple' ilike 'App%' --> 4. True
1. % 기호는 0개 또는 그 이상의 개수로 이뤄진 문자를 의미합니다.
따라서 app%는 app 또는 app로 시작하는 모든 문자를 의미하죠. (e.g. appz, appeidgow, aprurgw, app 등 모두 이 패턴에 해당됩니다.)
apple는 app% 패턴과 일치하므로 True를 반환합니다.
2. apple이란 텍스트에는 app%라는 패턴이 존재합니다.
따라서 True를 반환합니다.
3. apple이라는 텍스트에는 App%이라는 패턴이 존재하지 않습니다.
like는 대소문자를 구분하기 때문이죠.
따라서 False를 반환합니다.
4. ilike는 대소문자를 구문하지 않으므로 apple에는 App%라는 패턴이 존재한다고 할수있습니다.
True를 반환합니다.
'apple' like 'app_' --> 1. False
'apple' like 'app__' --> 2. True
'apple' ilike 'app_' --> 2. False
'apple' ilike 'app__' --> 2. True
1. unserscore(_) 기호는 1개의 문자를 의미합니다.
app_는 appb, appd, appg appz, app1 등을 의미할 수 있죠.
apple에는 app_라는 패턴이 존재할 수 없습니다. 글자수 자체가 다르죠.
따라서 False를 return합니다.
2. 1번과는 다르게 unserscore(_)기호가 2번 적혔습니다.
따라서 apple에는 app__라는 패턴이 존재한다고 할 수 있습니다.
True를 반환합니다.
3. 1번과 동일합니다.
4. 2번과 동일합니다.
'apple' like '%ple%' --> 1. True
'apple' ilike '_ppl%' --> 2. True
'apple' like '%ple%' --> 1. True
'apple' ilike '%ppl_' --> 2. True
위 예시처럼 wildcard(%, _)는 원하는 개수만큼 원하는 위치에 사용할 수 있습니다.
%ple% --> 텍스트의 어딘가에 ple가 포함되면 True 반환
_ppl% --> 첫 번째 텍스트가 존재(_)하고, 그 다음 문자가 ppl이며 그 뒤로 문자가 0개 이상 존재하면 True 반환
위처럼 패턴을 해석해볼 수 있습니다.