SQL - select

박진은·2023년 3월 3일
0

코테

목록 보기
4/44
SELECT MEMBER_ID, MEMBER_NAME, GENDER, 
DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d") as DATE_OF_BIRTH
FROM MEMBER_PROFILE 
WHERE gender = 'w' and DATE_FORMAT(DATE_OF_BIRTH,"%m")= '03' AND not TLNO is NULL ORDER BY MEMBER_ID ASC

위의 쿼리가 해석하는 바는 member-profile table에서 memberid membername gender dateofbirth 를 고르는데 전화번호가 null 이 아니고 생일이 3월이고 여자인 회원을 골라서 맴버 아이디를 기준으로 오름차순으로 달라는 말이다.
이 문제를 풀면서 첫번째로 막혔던 부분이 전호번호가 null 인 부분을 거르는 방식이다. 필자는 !=를 비교 연산자로 사용했는데 mysql은 위와 같은 방식으로 사용하면 전부다 걸러진다 왜냐하면 != 는 값 자체를 비교하는 것이기 때문이다. 따라서 반드시 is not NULL로 비교해야한다.

그리고 두번째로 막힌 부분은 날짜를 포매팅하는 것이다.
MYSQL 에서 날짜를 포맷팅하기 위해서 사용하는 함수는 DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d")이다.

%M Month 월(Janeary, February ...)
%m Month 월(01, 02, 03 ...)
%W Day of Week 요일(Sunday, Monday ...)
%D Month 월(1st, 2dn, 3rd ...)
%Y Year 연도(1999, 2000, 2020)
%y Year 연도(99, 00, 20)
%X Year 연도(1999, 2000, 2020) %V와 같이쓰임
%x Year 연도(1999, 2000, 2020) %v와 같이쓰임
%a Day of Week요일(Sun, Mon, Tue ...)
%d Day 일(00, 01, 02 ...)
%e Day 일(0, 1, 2 ..)
%c Month(1, 2, 3 ..)
%b Month(Jen Feb ...)
%j n번째 일(100, 365)
%H Hour 시(00, 01, 24) 24시간 형태
%h Hour 시(01, 02, 12) 12시간 형태
%I(대문자 아이) Hour 시(01, 02 12) 12시간 형태
%l(소문자 엘) Hour 시(1, 2, 12) 12 시간 형태
%i Minute 분(00, 01 59)
%r hh:mm:ss AP | PM
%T hh:mm:ss
%S, %s Second 초
%p AP, PM
%w Day Of Week (0, 1, 2) 0부터 일요일
%U Week 주(시작: 일요일)
%u Week 주(시작 월요일)
%V Week 주(시작: 일요일)
%v Week 주(시작:월요일)

mysql에서 사용하는 포멧이니 알아두면 좋다 하지만 다른 규칙은 대문자 YyMmDd가 다른 표현이라는 것이다 알아두면 좋다.
그리고 또 격었던 문제가 월별로 비교하는 것이었는데 이때 월을 비교하기 위해서는 해당 날짜를 가진 컬럼을 DATE_FORMAT(DATE_OF_BIRTH,"%m")= '03' 이렇게 포맷팅해서 비교하면 할 수 있다
DATE_FORMAT(DATE_OF_BIRTH,"%d")= '03' 만약 날짜를 비교하는 경우라면 위와 같이 날짜만을 포멧팅한 후에 비교하면 된다.

profile
코딩

0개의 댓글