< 문제 >
https://school.programmers.co.kr/learn/courses/30/lessons/131120
< FAIL >
SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE TLNO NOT IN('NULL') AND GENDER = 'W' AND MONTH(DATE_OF_BIRTH) = "3" ORDER BY MEMBER_ID;
MEMBER_ID | MEMBER_NAME | GENDER | DATE_OF_BIRTH |
seoyeons@naver.com | 박서연 | W | 1992-03-16 00:00:00 |
DATE_OF_BIRTH 칼럼 값에 시간 값이 더해져 추출된 것이 문제라고 생각되어 해당 부분이 출력되지 않도록 수정하였습니다.
< PASS >
SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d')DATEONLY FROM MEMBER_PROFILE WHERE TLNO NOT IN('NULL') AND GENDER = 'W' AND MONTH(DATE_OF_BIRTH) = "3" ORDER BY MEMBER_ID;
위의 코드로 해당 문제를 PASS 하였습니다. 하지만 개선 사항이 존재하는데요, 바로 DATEONLY 부분입니다. 처음에는 이또한 문법의 일부 즉, 함수라고 생각하였는데, 단순 별칭이었습니다. 그래서 아래와 같이 AS를 붙여 출력시 보이는 칼럼이 DATE_OF_BIRTH 가 되도록 작성해 줍니다.
SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE TLNO NOT IN('NULL') AND GENDER = 'W' AND MONTH(DATE_OF_BIRTH) = "3" ORDER BY MEMBER_ID;
WHERE TLNO IS NOT NULL
IS NOT NULL 구문을 사용해 줄 수있습니다.
CHAT GPT에 질의한 바로는..
- TLNO NOT IN('NULL'): 이 구문은 TLNO 칼럼의 값이 문자열 'NULL'과 일치하지 않는 레코드를 필터링합니다. 실제 NULL 값과는 관련이 없습니다.
- TLNO IS NOT NULL: 이 구문은 TLNO 컬럼에 실제 NULL 값이 없는 레코드를 필터링합니다. 이 구문은 NULL 값을 확인하는 데 사용되며, 해당 상황에 더 적합한 문법입니다.
< 참고 >
https://marketinga.tistory.com/13
https://chobokkiri.tistory.com/49
https://ponyozzang.tistory.com/656