-
만우절 기념 TIL스파르타/TIL(Today I Learned) 2024. 4. 1. 10:22
오늘은 아침에 sql 문제를 푸는 도중에 새로운 걸 알아서 적어본다.
문제는 다음과 같다.
Write a solution to find the patient_id, patient_name, and conditions of the patients who have Type I Diabetes. Type I Diabetes always starts with DIAB1 prefix
: 솔루션을 작성하여 제1형 당뇨병 환자의 patient_id, patient_name 및 상태를 찾으십시오. 제1형 당뇨병은 항상 DIAB1 접두사로 시작합니다
여기 문제에서 보면 항상 DIAB1 이 접두사로 시작을 해야한다.라고 써있다.이는 만일 ACNE DIAB100 이렇게 되어있어도 두번째 단어의 접두사이기 때문에 출력이 되어야 한다.
이를 처음에는 별 생각없이 그냥 where conditions regexp ' DIAB1 ' 을 사용하니 실패를 하였다.이는 중간에 DIAB1 가 있어도 출력이 되기 때문에 우리는 중간이 아닌 시작하는 곳에 있으면 좋기 때문에 조건을 수정한다.그렇게 해서 알아낸것은 바로 '\\b'라는 정규 표현식의 조건이다.
이는 \b는 단어의 경계(시작과 끝)을 의미한다.이를 정규 표현식에 적용를 하려면 \\b 이렇게 적어야한다.이스케이프를 인식시키기 위해서 이렇게 쓴다고 한다. -> 꽤나 이해가 안되지만 억지로 이해중..
\b가 공백을 제외하고 단어의 시작과 끝에 해당하는 DIAB1을 찾는다.라는 뜻이랍니다~
select patient_id, patient_name, conditions from Patients where conditions regexp '(^|\\b)DIAB1'
이렇게 사용하면 된다~
^ : 시작하는 단어가 ~ 라는 뜻이고
() : 여러 조건을 설정할 때 사용한다.
시작하는 단어가 DIAB1 이거나~ 단어의 공백을 제외하고(공백에 의해 두 번째에 단어가 위치하여도)단어의 경계부분에 해당하면
출력해라~ 라는 뜻.
참고글
요약
- regexp \\b를 배웠음 신기함
- 이를 활용하면 접두사로 사용하는 단어의 조건을 만족시킬 수 있음
'스파르타 > TIL(Today I Learned)' 카테고리의 다른 글
24/3/8 (0) 2024.03.08 2/29 TIL (1) 2024.02.29 2/5 (0) 2024.02.05 1월 마지막 주 ~ 2월 첫째 주 WIL (1) 2024.02.05 2/1 (0) 2024.02.01