문자열 날짜를 파싱해 해당 주의 월요일 날짜를 요일 일 월 형식으로 출력하는 복합 쿼리입니다.
테이블 생성 및 데이터 삽입
mysql> CREATE TABLE DemoTable1820 (AdmissionDate VARCHAR(20));
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO DemoTable1820 VALUES('20/10/2019');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1820 VALUES('19/12/2018');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1820 VALUES('16/04/2017');
Query OK, 1 row affected (0.00 sec)
데이터 조회
mysql> SELECT * FROM DemoTable1820;
+---------------+ | AdmissionDate | +---------------+ | 20/10/2019 | | 19/12/2018 | | 16/04/2017 | +---------------+ 3 rows in set (0.00 sec)
해당 주의 월요일 날짜 구하기
mysql> SELECT DATE_FORMAT(
-> SUBDATE(
-> STR_TO_DATE(AdmissionDate, '%d/%m/%y'),
-> WEEKDAY(STR_TO_DATE(AdmissionDate, '%d/%m/%y'))
-> ),
-> '%a %d %b'
-> ) FROM DemoTable1820;
+-------------------------------------------------------------------------------------------------------------------------+ | DATE_FORMAT(SUBDATE(STR_TO_DATE(AdmissionDate,'%d/%m/%y'), WEEKDAY(STR_TO_DATE(AdmissionDate,'%d/%m/%y'))), '%a %d %b') | +-------------------------------------------------------------------------------------------------------------------------+ | Mon 19 Oct | | Mon 14 Dec | | Mon 13 Apr | +-------------------------------------------------------------------------------------------------------------------------+ 3 rows in set, 6 warnings (0.00 sec)
단계별 해설:
STR_TO_DATE(AdmissionDate, '%d/%m/%y'): 문자열 → DATE ('2019-10-20' 등).%y는 2자리 년도(2019→19). 4자리면%Y.WEEKDAY(date): 월요일=0 ~ 일요일=6 반환.SUBDATE(date, WEEKDAY(...)): 날짜에서 요일 수만큼 빼서 월요일로 맞춤.DATE_FORMAT(..., '%a %d %b'): 'Mon 19 Oct' 형식 출력.
경고: 2자리 년도(%y) 사용 시 1970~2069 해석 규칙 적용돼 경고 발생. %Y 권장.