mysql 날짜관련 질문 0 4 866

by 밍밍밍밍 [MySQL] [2018.04.11 14:18:43]


LE.SDATE <=
                                    date_add(
                                       date_format('2018-04-31', '%Y-%m-%d'),
                                       INTERVAL -1 MONTH)

 

 

LE.SDATE <= '2018-03-31'

 

날짜관련 조건입니다.

쿼리 실행시 위 조건이랑 아래조건값이 다르게 나오는데..

위 조건에서 2018-04-31에서 한달을 빼서 2018-03-31로 되는지 알았는데

아닌거같습니다..

위 조건에서 한달을 빼고싶은데 수정해야할 부분이 있으면 답변부탁드리겠습니다.

 

by 비연 [2018.04.11 14:38:53]

LE.SDATE <= date_add('2018-01-01', interval -1 month)   

전 잘 가져옵니다. 


by 밍밍밍밍 [2018.04.11 14:40:07]

아.. 달력에 4월31일이 없어서 그런거같습니다..

4월30일로 조회하니 제대로 나오네요..


by 마농 [2018.04.11 14:45:18]

1. '2018-03-31' 이 나오지는 않네요.
 date_add(date_format('2018-04-31', '%Y-%m-%d'), INTERVAL -1 MONTH)  ==> 에러(4월31일은 없는 날짜)
 date_add(date_format('2018-04-30', '%Y-%m-%d'), INTERVAL -1 MONTH)  ==> '2018-03-30'
2. 오라클과 비교해 보면
  - 오라클의 ADD_MONTHS 함수와는 결과가 다르네요. 오라클 말일의 한달전은 말일이 나옴
  - 오라클에서도 ADD_MONTHS 대신 Interval 을 이용하여 빼면 동일한 결과가 나오네요.
3. 불필요한 구문
  - 참고로 date_format 함수는 문자를 날짜로 바꾸는 함수가 아닌 날짜를 문자로 바꾸는 함수입니다.
  - 즉, 위 구문에서는 쓸데 없이 소모적으로 사용된 구문입니다. 빼야 하구요.
4. 말일의 한달전은 말일이 나와야 한다면?
  - 로직이 좀 들어가야 할 것 같네요.
  - 조건으로 말일날짜만 주어지나요? 아니면 중간 날짜로 주어질수도 있나요?
  - 비교되는 컬럼 LE.SDATE 의 자료형은 뭔가요?(문자? or 날짜?)
  - 저장 형태는? 날짜만 저장? 시분초까지 저장?


by 밍밍밍밍 [2018.04.11 14:59:30]

답변감사드립니다. 불필요한 구분은 빼도록하겠습니다.

컬럼은 VARCHAR2입니다. 저장은 날짜만 저장합니다.

그리고 기준을 말일로 잡았는데 01일로 잡으면 말씀하신 로직을 안만들어도 될거같아서 01일로 잡아서 테스트해보려고 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입