PostgreSQL의 DATEADD()에 대한 대안

Bilal Shahid 2023년6월20일
  1. SQL의 DATEADD() 함수
  2. PostgreSQL에서 DATEADD() 대신 +- 연산자 사용
  3. PostgreSQL에서 DATEADD() 대신 INTERVAL 데이터 유형 사용
PostgreSQL의 DATEADD()에 대한 대안

이 문서에서는 PostgreSQL의 DATEADD() 함수에 대한 대안에 대해 설명합니다.

SQL의 DATEADD() 함수

제품이 만료되는 데 걸리는 일수와 함께 데이터베이스에 저장된 제품의 제조 날짜가 있다고 가정합니다. 다음 표를 통해 이를 증명할 수 있습니다.

Create table product
(
name varchar(30) not null,
manufacture_date date,
expires_in int,
constraint PK_PRODUCT primary key (name)
);

이제 제품의 샘플 데이터로 이 테이블을 채우겠습니다.

insert into product values ('Fruit Juice', '2022-08-24', 10);

출력:

PostgreSQL DATEADD - 출력 1

이 데이터에서 우리는 제품이 10일 후에 만료된다는 것만 알고 있지만 정확한 만료 날짜는 모릅니다. 주어진 데이터에서 계산할 수 있는 방법이 있습니까?

SQL 서버에는 주어진 날짜에 날짜 간격을 추가하는 데 도움이 되는 DATEADD() 함수가 있습니다. 예를 들어 SQL 서버에서 다음 쿼리를 실행할 수 있습니다.

SELECT DATEADD(day, 1, '2022-08-26') as Next_Day;

출력:

PostgreSQL DATEADD - 출력 2

출력은 지정된 날짜에 1일을 더한 결과를 반환했습니다. 마찬가지로 DATEADD() 함수를 사용하면 월 및 연도와 같은 다른 유형의 날짜 간격을 추가할 수 있습니다.

DATEADD() 함수를 갖는 것은 날짜의 덧셈과 뺄셈이 숫자만큼 간단하지 않기 때문에 유용합니다. 월과 연도의 값은 특정 일 이후에 증가해야 하며 일도 일정 시간이 지나면 1부터 다시 시작해야 한다는 점을 기억해야 합니다.

그러나 PostgreSQL은 SQL 서버와 유사한 DATEADD() 기능을 제공하지 않습니다. 그렇다면 PostgreSQL에서 필수 날짜 계산을 어떻게 수행합니까?

이 기사에서는 PostgreSQL의 DATEADD() 함수에 대한 대안에 대해 설명합니다.

PostgreSQL에서 DATEADD() 대신 +- 연산자 사용

이를 수행하는 한 가지 방법은 정수 덧셈 및 뺄셈에서와 같이 +- 연산자를 사용하는 것입니다. + 연산자를 사용하여 특정 일수를 날짜에 추가하는 방법을 살펴보겠습니다.

SELECT date '2022-08-24' + 10 as Expiration_Date;

그러면 다음과 같은 출력이 생성됩니다.

PostgreSQL DATEADD - 출력 3

예상대로 지정된 날짜에 10일이 추가된 것을 확인할 수 있습니다. 이 쿼리를 작성하는 또 다른 방법은 다음과 같으며 동일한 결과를 생성합니다.

SELECT date '2022-08-24' + integer 10 as Expiration_Date;

출력:

PostgreSQL DATEADD - 출력 4

다음으로 +- 연산자를 사용하여 시간을 거슬러 올라가 날짜에서 주어진 일 수를 빼는 방법을 살펴보겠습니다. 이를 수행하는 첫 번째 방법은 아래와 같이 + 연산자를 사용하고 음의 정수 값을 제공하는 것입니다.

SELECT date '2022-09-03' + -10 as Manufacture_Date;

또는

SELECT date '2022-09-03' + integer -10 as Manufacture_Date;

출력은 아래와 같습니다.

PostgreSQL DATEADD - 출력 5

두 번째 방법은 - 연산자를 사용하여 빼려는 일 수를 지정하는 것입니다. 이는 다음과 같은 방식으로 수행됩니다.

SELECT date '2022-09-03' - 10 as Manufacture_Date;

또는

SELECT date '2022-09-03' - integer 10 as Manufacture_Date;

출력은 아래와 같습니다.

PostgreSQL DATEADD - 출력 6

+- 연산자를 사용하는 이 방법은 특정 일 수만 추가해야 하는 경우에 유용합니다.

날짜에 2개월을 추가하려면 어떻게 해야 합니까? 언제든지 2개월을 며칠로 변환한 다음 + 연산자를 사용하여 추가할 수 있지만 이는 긴 프로세스입니다.

또는 INTERVAL 데이터 유형을 사용하여 날짜 간격을 직접 추가할 수 있습니다. 이 방법은 아래에 설명되어 있습니다.

PostgreSQL에서 DATEADD() 대신 INTERVAL 데이터 유형 사용

INTERVAL 데이터 유형은 일, 월, 년, 주 및 시간을 시, 분, 초 단위로 저장합니다. 몇 가지 샘플 쿼리를 실행하여 각각이 어떻게 사용되는지 보여드리겠습니다.

일 간격

다음과 같은 방법으로 특정 날짜 수를 날짜에 추가할 수 있습니다.

SELECT date '2022-08-24' + INTERVAL 10 day as Expiration_Date;

이는 다음과 같은 결과를 제공합니다.

PostgreSQL DATEADD - 출력 7

출력이 시간대 없이 타임스탬프로 표시되는 것을 볼 수 있습니다. 이는 INTERVAL 데이터 유형이 시간 값도 처리하기 때문에 쿼리에 지정된 날짜가 날짜 및 시간 값을 모두 타임스탬프로 갖도록 변환되었기 때문입니다.

개월 간격

다음과 같은 방법으로 특정 개월 수를 날짜에 추가할 수 있습니다.

SELECT date '2022-08-24' + INTERVAL 2 month as Expiration_Date;

이는 다음과 같은 결과를 제공합니다.

PostgreSQL DATEADD - 출력 8

년 간격

다음과 같은 방법으로 특정 연도를 날짜에 추가할 수 있습니다.

SELECT date '2022-08-24' + INTERVAL 1 year as Expiration_Date;

이는 다음과 같은 결과를 제공합니다.

PostgreSQL DATEADD - 출력 9

주 간격

다음과 같은 방법으로 특정 주 수를 날짜에 추가할 수 있습니다.

SELECT date '2022-08-24' + INTERVAL 1 week as Expiration_Date;

이는 다음과 같은 결과를 제공합니다.

PostgreSQL DATEADD - 출력 10

여러 날짜 간격

INTERVAL 데이터 유형을 사용하여 한 번에 여러 유형의 날짜 간격을 추가할 수도 있습니다. 아래에 예가 나와 있습니다.

SELECT date '2022-08-24' + INTERVAL 1 week 2 day as Expiration_Date;

이는 다음과 같은 결과를 제공합니다.

PostgreSQL DATEADD - 출력 11

참고: 이 외에도 추가할 정확한 시간, 분 또는 초를 지정하여 INTERVAL 데이터 유형을 사용하여 날짜에 시간 간격을 추가할 수도 있습니다.

변수의 날짜 간격

기사 시작 부분에서 제조 날짜의 저장된 값과 만료까지의 일 수에서 만료 날짜를 계산하는 예를 설명했습니다. 변수에 저장된 값을 사용하여 날짜 계산을 수행하는 방법을 살펴보겠습니다.

구문은 다음과 같습니다.

SELECT manufacture_date + expires_in * INTERVAL '1 day' as Expiration_Date FROM product;

이 쿼리에서는 expires_in 변수에 저장된 값을 날짜를 나타내는 INTERVAL로 변환했습니다. 이는 다음과 같은 결과를 제공합니다.

PostgreSQL DATEADD - 출력 12

마찬가지로 정수로 저장된 값을 월, 연, 주로 변환하고 날짜 계산을 수행할 수도 있습니다.

이것은 PostgreSQL의 DATEADD() 함수에 대한 대안에 대한 논의를 요약한 것입니다. 계속 공부하다!

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

관련 문장 - PostgreSQL Date