Oracle 기준으로 다음 SQL 의 실행 결과로 옳은 것은?[처방메모… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
Oracle 기준으로 다음 SQL 의 실행 결과로 옳은 것은?[처방메모]
| 번호 | 메모 |
|---|---|
| 1 | 아침 2정 저녁 1정 |
| 2 | 1일 3회 10mL |
| 3 | 필요시 복용 |
| 4 | (null) |
SELECT 번호,
REGEXP_COUNT(메모, '[[:digit:]]+') AS 개수,
REGEXP_REPLACE(메모, '[[:space:]]', '') AS 정리
FROM 처방메모
ORDER BY 번호;1
| 번호 | 개수 | 정리 |
|---|---|---|
| 1 | 2 | 아침2정저녁1정 |
| 2 | 3 | 1일3회10mL |
| 3 | 0 | 필요시복용 |
| 4 | 0 | (null) |
2
| 번호 | 개수 | 정리 |
|---|---|---|
| 1 | 2 | 아침2정저녁1정 |
| 2 | 4 | 1일3회10mL |
| 3 | 0 | 필요시복용 |
| 4 | (null) | (null) |
3
| 번호 | 개수 | 정리 |
|---|---|---|
| 1 | 2 | 아침2정저녁1정 |
| 2 | 3 | 1일3회10mL |
| 3 | 0 | 필요시복용 |
| 4 | (null) | (null) |
4
| 번호 | 개수 | 정리 |
|---|---|---|
| 1 | 2 | 아침2정 저녁 1정 |
| 2 | 3 | 1일3회 10mL |
| 3 | 0 | 필요시복용 |
| 4 | (null) | (null) |
해설
[[:digit:]]+ 는 숫자가 한 번 이상 이어진 덩어리를 하나로 세므로 1일 3회 10mL 는 1, 3, 10 으로 3개이고, 숫자가 없는 메모는 0 이다.
Oracle REGEXP_REPLACE 는 기본적으로 일치하는 모든 공백을 지우며, 메모가 NULL 인 행은 두 함수 모두 NULL 을 돌려준다.
- 첫 공백만 지운 결과는 바꾸기가 한 번만 일어난다고 오해한 것이다.
- 2번째 메모를 4개로 센 결과는 + 를 무시하고 숫자 한 글자씩 센 것이다.
- NULL 메모의 개수를 0 으로 본 결과는 NULL 입력이 NULL 을 낸다는 점을 놓친 것이다.
오류나 개정된 내용이 보이면 알려주세요