강의로 돌아가기
송병훈

MySQL에서 날짜를 등호로 하면 틀렸다고 나오고, LIKE나 BETWEEN으로 하면 되네요. 왜 그런건가요?

.

작성중인 코드―solution.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 
-- 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.
SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, A.MCDP_CD, D.DR_NAME, A.APNT_YMD
-- 3개의 테이블을 겹치는 컬럼으로 각각 JOIN
FROM PATIENT P 
    JOIN APPOINTMENT A ON P.PT_NO = A.PT_NO
    JOIN DOCTOR D ON D.DR_ID = A.MDDR_ID
WHERE A.MCDP_CD = 'CS'
    AND A.APNT_CNCL_YN = 'N'
    -- 날짜를 등호로 하면 틀렸다고 나온다. LIKE나 BETWEEN으로 해결하자
    AND A.APNT_YMD LIKE '2022-04-13%'
ORDER BY APNT_YMD
;
1 개의 답변
hyeri

안녕하세요 송병훈 님 ⁣😊✨

주석까지 상세한 멋진 코드 공유 주셔서 감사합니당⁣

날짜를 등호로 하면 틀렸다고 하신 말은 WHERE APNT_YMD = '2022-04-13'으로 작성했을 경우 오류임을 말씀 주시는 것 같습니당⁣

의심 가는 부분은 데이터 포맷 때문이 아닐까 싶습니당 ⁣
APNT_YMD를 출력하면 '2022-01-13 09:00:00'와 같이 연월일 다음에 시분초까지 붙는 것을 알 수 있습니다. 등호 연산자를 사용하시려면 데이터 포멧을 염두에 두어 시,분,초까지 명시해하 할 것 같습니당.⁣

2022-01-13인 경우를 예로 들면 ⁣
WHERE APNT_YMD = '2022-01-13'를 출력하면 아무것도 나오지 않지만 ⁣

/*출력 결과
*/

WHERE APNT_YMD = '2022-01-13 09:00:00'를 출력하면 해당 ROW가 출력됨을 알 수 있습니당 ⁣

/*출력 결과⁣
2022-01-13 09:00:00 */⁣

문제의 조건과 같이 연월일만 염두에 두어 등호 연산자를 사용하고 싶을때는 컬럼을 DATE_FORMAT() MySQL함수⁣를 사용하면 좋을 것 같습니당 ⁣

(예시. WHERE DATE_FORMAT(APNT_YMD, '%Y-%m-%d') = '2022-01-13'

/* 출력결과
2022-01-13 09:00:00
2022-01-13 09:30:00
2022-01-13 13:30:00
2022-01-13 15:30:00 */

)

작성해 주신 WHERE 절의 LIKE '%'와일드카드의 위치는 ⁣
'2022-01-13' 뒤에 어떤 시분초가 오든 상관없기 때문에 정답이고⁣
BETWEEN 또한 범위이기 때문에 가능한 것으로 보입니당⁣

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.