본문 바로가기

SQL

pgadmin 달력 요일 계산, 날짜 함수, 두 날짜간의 차이 등

pgadmin에서 제공하는 함수들이 많다. 

 

// 현재 날짜

SELECT NOW()

SELECT CURRENT_DATE

 

// GENERATE_SERIES 함수 

GENERATE_SERIES 함수는 PGADMIN9.1버전 부터 사용 가능하며

java로 치면 for문과 매우 유사한 함수이다. 아니면 파이썬 for문이였나 암튼

for문이 (초기값,조건식,증감식) 이라면

GENERATE_SERIES (초기값 , 목표값,증감값) 느낌이다.

10 부터 1이 될 때까지 -1씩 감소

엥 근데 이게 날짜랑 무슨 상관이냐구요?

이 함수는 편리한게 날짜데이터도 계산을 해주더라고요

2024-01-01 부터 2024-12-31 까지 1시간씩 증가

::date 부분은 text형식을 날짜로 변환시켜 주는 것이고

1 HOURS를 쓰면 1시간씩 증가가 된다.

이번에는 1 DAY를 써서 1일씩 증가하는 쿼리

어떤 느낌인지 감이 올 것이다.

 

// extract 함수

 

extract함수는 요일을 구할때 쓴다

이런 식으로 오늘 날짜의 월을 출력할 수도 있고
DOW를 쓰면 해당 요일을 갖고온다

DOW (일요일 0 ~ 토요일 6)

ISODOW (월요일 1 ~ 일요일 7)

 

//두 날짜간의 차

꼭 날짜형식 데이터로 해야한다 TEXT형식의 데이터는 오류

사실 위에 날짜 함수 설명은 두 날짜간의 차이를 하기 위한 빌드업이다.

이렇게 두 개의 데이터에서 차이는 간단하게 알 수 있지만

납기단축, 수주출하리드타임 처럼 산출식이 주말은 포함하지 않는다면?

즉 납기일자 - 지시일자 = 납기일 (다만 주말은 포함하지 않음) 이런 산출식이 있을때

2023년 2월 6일 부터 2023년 2월 14일 까지 하루씩 증가
2023년 2월 6일 부터 2023년 2월 14일까지 해당 요일 구하기
두 날짜간의 차이 WORKDAY IN 으로 주말을 제외 시켰고 COUNT(*) -1로 하루 빼줘야 두 날짜간의 차이가 된다

 

물론 이 방법은 단건 일때 쿼리이다.

그러면 납기일자 - 지시일자를 해서 납기일을 구할 때 여러 데이터 건을 구해줘야 한다면?

방법은 더 있을 수 있겠지만 달력 테이블을 하나 만들고

데이터 값을 미리 넣어준다. 주말은 WORK_YN 컬럼에 N으로 들어가고

그 이후 달력테이블을 조인시켜 납기일자 - 지시일자 해서 나온 값에 휴일 수 만큼 -1씩 해주면 된다.

아무튼 오늘은 이걸로 마치고 야식이나 먹어야겠다.