https://indistract.tistory.com/13
[SQL] 조건에 맞는 문자열 검색
https://www.hackerrank.com/challenges/weather-observation-station-8/problem?isFullScreen=true Weather Observation Station 8 | HackerRank Query CITY names that start AND end with vowels. www.hackerrank.com Query the list of CITY names from STATION which hav
indistract.tistory.com
위 게시글에서는 조건에 맞는 문자열을 검색하는 방법을 다뤘다. LEFT(), RIGHT() 함수를 이용할수도 있지만, 정규 표현식을 이용해서도 원하는 형태의 문자열을 출력할 수 있었다. 이번글에서는 정규 표현식에대해 좀더 다뤄보고자 한다.
정규 표현식은 영어로 regular expression이라고 표현한다. 이는 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 이를 간략히해서 regexp 라고 지칭하며, 실제로 SQL에서 정규표현식을 쓸때도 WHERE NAME REGEXP의 형태로 질의한다. SQL에서 LIKE문을 사용하는대신 정규표현식을 사용하면 구문을 좀더 간결하게 쓸 수 있는 경우가 많다.
https://www.hackerrank.com/challenges/weather-observation-station-11/problem?isFullScreen=true
Weather Observation Station 11 | HackerRank
Query a list of CITY names not starting or ending with vowels.
www.hackerrank.com
Query the list of CITY names from STATION that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.
지난 문제에서는 모음으로 시작하고, 모음으로 끝나는 도시의 명단을 출력하길 원했다. 이번에는 반대로 모음으로 시작하지 않거나(OR), 모음으로 끝나지 않는 도시를 출력하길 원한다. 이 경우에는 LEFT(), RIGHT() 함수를 사용하기 좋은 경우는 아니다. 모음은 'a, e, i, o, u'로 5개만 존재하지만, 자음은 24개나 존재하기때문에, 이를 모두 나열하면 장황한 쿼리가 될 수 있다.
그래서 이렇게 '특정 문자를 포함하지 않는' 경우를 조건으로 문자열을 검색할때는, 정규표현식을 이용하는게 용이하다. 정규 표현식은 여집합을 이용해서 문자열을 검색할 수 있기 때문이다. [^문자] 로 표현식을 작성하면, 괄호 안의 문자를 포함하지 않는 문자열을 찾게 된다. 그를 이용해서 쿼리를 작성하면 아래와 같다.
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[^aeiou]|[^aeiou]$'
'sql' 카테고리의 다른 글
[SQL] ROW_NUMBER / RANK / DENSE_RANK (0) | 2022.12.27 |
---|---|
[SQL] NESTED CASE (0) | 2022.12.26 |
[SQL] COUNT()와 NULL (0) | 2022.12.24 |
[SQL] 조건에 맞는 숫자 탐색 (0) | 2022.12.24 |
[SQL] 조건에 맞는 문자열 검색 (0) | 2022.12.23 |