본문 바로가기

B/웹 백엔드

vertica에서 ADD_MONTHS 함수 실전에서 사용하기

 

https://www.vertica.com/docs/11.0.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Date-Time/ADD_MONTHS.htm

 

ADD_MONTHS

ADD_MONTHS Adds the specified number of months to a date and returns the sum as a DATE. In general, ADD_MONTHS returns a date with the same day component as the start date. For example: => SELECT ADD_MONTHS ('2015-09-15'::date, -2) "2 Months Ago"; 2 Months

www.vertica.com

데이터를 년/월/일 기준으로 나누는 작업을 많이 하게 된다.

특히 스냅샷 데이터를 다루고 학습/검증/테스트 데이터를 만들려고 할때,

정확한 날짜를 계산해서 데이터를 자르고 합치는 작업에 신중해야 한다.

몇가지 사례 공유

DATE TYPE을 넘겨주는게 가장 정석이지만, String 형태의 8자리를 날짜로 다루고 싶은 경우에 대해 서술.

 

1. String 형태의 8자리를 날짜로 다루고 싶다면

DATE('20230101')

2. 해당 날짜의 3개월을 더하고 싶다면

ADD_MONTH(DATE('20230101'),3) => 2023년 1월 1일로 데이트 타입으로 바뀌고, 3개월 더해서 2023년 4월 1일이 됌.

3. 만약 여기서 일자를 자르고 년/월까지로 표시하고 싶다면

TO_CHAR(ADD_MONTH(DATE('20230101'),3), 'YYYYMM') => TO_CHAR 함수 이용

4. 특정 컬럼이 특정 년월 사이에 들어오는지를 조건으로 걸고 싶다면

BAS_NYYMM BETWEEN TO_CHAR(ADD_MONTH(DATE('20230101'),0), 'YYYYMM') AND TO_CHAR(ADD_MONTH(DATE('20230101'),3), 'YYYYMM')



다만 주의해야할건 버티카에서 BETWEEN A AND B 구문을 썼을때, A이상  B미만으로 잡히기 때문에,

B+1개월을 해줘야 정확한 값을 얻을 수 있다.

 

즉 위의 구문에서, BAS_NYYMM이라는 컬럼이 2023/01~ 2023/04 일것 같지만,

실제로 동작은 2023/01~ 2023/03 으로 동작한다.

'B > 웹 백엔드' 카테고리의 다른 글

[Flask] routing 기초  (0) 2021.11.22