Q. Doctor 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요.
이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
정답
SELECT dr_name, dr_id, mcdp_cd,
date_format(hire_ymd, '%Y-%m-%d') hire_ymd
from doctor
where mcdp_cd IN ("CS", "GS")
order by hire_ymd desc, dr_name
여기서 막혔던 곳은
date_format 함수로 날짜 포맷을 바꿔주는 것
order by 에서 숫자로 지정하니까 정답이 아니었었다.
date_format
Date_format(해당컬럼/날짜, 원하는 포맷)
| 구분기호 | 역할 |
|---|---|
| %Y | 4자리 년도 |
| %y | 2자리 년도 |
| %M | January~ |
| %m | 숫자 월 (1~12) |
| %D | 1st, 2nd ~ |
| %d | 일(01~31) |
| %H | 00~23 (시) |
| %h | 01~12 (시) |
| %i | 00~59 (분) |
| %S | 00~59 (초) |
| %W | Monday |
| %a | Mon |
- 대소문자 구분에 주의!!
date_format 문제를 몇번 만나다보니 점점 어떻게 풀지 감이 오는 것 같다.
Order by
나는 select 문 3번째 순으로 정렬해줘라고 생각했으나, 컴퓨터는 date_format으로 뒤덮힌 hire_ymd를 제대로 인식하지 못하는 것 같다.
앞으로 그냥 애매하게 생겼을 땐 컬럼명을 제대로 지정해줘야겠다.
따로 개인학습을 하다 새롭게 알게된 걸 정리하고자 한다.
이전에 유튜브 독학으로 파이썬을 배웠을 때 변수값을 가져올때 .format(blabla) 이렇게 가져오는게 귀찮았는데 f-string은 너무 편해서 마음에 들었다.
x = 1
y = 2
print("{} + {}는 {}입니다.".format(x, y, x+y))
x = 1
y = 2
print(f"{x} + {y} 는 {x+y} 입니다.")

저게 프린트 문이 짧아서 망정이지... 프린트문도 긴데 format()까지 주렁주렁 달았을때 너무 고통스러웠었다.
더 쉽게 작성하는 방법을 알았으니 이제 이걸 활용해서 코드 작성해야겠다 🥳