문제는 여기에서 풀수 있습니다!
DOCTOR
테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성
이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬
(+) 여기서 '날짜 포맷은 예시와 동일하게 나와야합니다.'라는 조건이 문제 제일 아래에 있는데 예시는 2020-03-01
처럼 년월일만 출력이 된다.
SELECT
DR_NAME,
DR_ID,
MCDP_CD,
SUBSTRING_INDEX(HIRE_YMD, ' ', 1)
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME
SELECT
를 통해 이름, ID, 진료과 코드, 고용일자를 표시한다.
하지만 그냥 고용일자를 표시하면 예시와 다르게 뒤에 시간이 표시된다. 이를 제거하기 위해 SUBSTRING_INDEX()
를 사용하였다.
SUBSTRING_INDEX
는 문자열에서 구분자 (delim)을 기준으로 구분자가 count만큼 나오기 전에 끊어주는 역할을 한다.
기본형태는 다음과 같다.
SUBSTRING_INDEX(str,delim,count)
따라서 나는 SUBSTRING_INDEX(HIRE_YMD, ' ', 1)
를 통해 처음으로 공백 (' ')이 나올때 문자열을 잘라서 출력하는 방식으로 풀었다.
하지만, 본 예시와 비슷하게 정형화된 포맷이 있는 경우는 left, substring, right
를 이용해 문자열을 원하는 수만큼 잘라내는 것이 가능하다.
따라서 LEFT(str, cnt)
를 이용한다면 다음과 같은 풀이도 가능한 것이다!
SELECT
DR_NAME, DR_ID, MCDP_CD,
LEFT(HIRE_YMD, 10)
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME
목적에 맞게, 취향껏! 사용하자 ㅋ.ㅋ