PostgreSQL - 오늘을 기준으로 날짜 및 시간 확인

Bilal Shahid 2023년6월20일
  1. PostgreSQL - 오늘을 기준으로 날짜 및 시간 확인
  2. PostgreSQL NOW() 함수
PostgreSQL - 오늘을 기준으로 날짜 및 시간 확인

이 튜토리얼은 PostgreSQL에서 오늘을 기준으로 날짜와 시간을 확인하는 방법을 보여줍니다.

PostgreSQL - 오늘을 기준으로 날짜 및 시간 확인

PostgreSQL을 사용하는 동안 사용자는 쿼리에서 오늘과 관련된 날짜를 사용해야 하는 경우가 많습니다. PostgreSQL은 현재 시간과 날짜를 가져오는 효율적인 기능과 방법을 제공합니다.

오늘을 기준으로 데이터 및 시간을 확인할 때 적절한 단계를 따르면 현재 지역을 변경하여 다른 타임스탬프를 얻을 수 있습니다. 일부 기능은 작업을 완료하지만 기능을 정확하게 사용하려면 기능을 이해하는 것이 중요합니다.

아래 NOW() 함수부터 시작하겠습니다.

PostgreSQL NOW() 함수

쿼리에서 현재 날짜와 시간을 사용해야 하는 경우 NOW() 기능이 작동하여 정확히 이를 제공합니다. 출력으로서 NOW()의 반환 유형은 다음과 같은 시간대가 있는 타임스탬프입니다.

SELECT NOW();

출력:

2022-09-14 13:21:36.175627+07

NOW() 함수는 데이터베이스 서버에 설정된 시간대를 기준으로 현재 날짜와 시간을 반환해야 합니다. 예를 들어 시간대를 로스앤젤레스로 설정하면 함수는 로스앤젤레스의 현재 시간과 날짜를 반환합니다.

다음 예에 표시됩니다.

SET TIMEZONE='America/Los_angeles';
SELECT NOW();

출력:

2022-09-14 02:16:21.759315-07

위의 예에서 NOW()의 반환 값은 할당된 새 시간대에 맞게 조정된 오늘의 현재 날짜 및 시간입니다. 다음과 같이 명시적으로 캐스팅하면 시간대 없이 오늘 PostgreSQL의 현재 날짜와 시간을 가져올 수도 있습니다.

SELECT NOW()::timestamp;

출력:

2022-09-14 02:16:21.324535

NOW() 기능은 매우 유연합니다. 미래의 데이터와 시간을 얻을 수 있습니다. 다음 예를 참조하십시오.

SELECT (NOW() + interval '1 hour') AS after_one_hour;

출력:

2022-09-14 03:16:21.759315-07

이 기능은 시간으로 제한되지 않습니다. 우리는 그것을 일과 분으로 확장할 수 있습니다. 다음 코드 스니펫을 참조하십시오.

SELECT (NOW() + interval '1 day') AS after_one_day;

출력:

2022-09-15 02:16:21.743315-07

다음은 또 다른 코드 블록입니다.

SELECT (NOW() - interval '4 hours 15 minutes') AS after_fourhrs_15min;

출력:

2022-09-14 10:01:21.776315-07

NOW() 기능을 기본값으로 사용

데이터베이스 테이블을 생성하는 동안 모든 테이블 열의 기본값으로 NOW()를 사용할 수 있습니다. 먼저 created_at 열을 사용하여 새 테이블을 만듭니다. NOW() 함수의 기본값으로 설정합니다.

CREATE TABLE table_name( 
    created_at TIMESTAMPTZ DEFAULT NOW()
);

테이블의 열에 데이터를 삽입하고 SELECT 명령으로 표시하면 created_at 열은 모든 데이터 항목에 대한 타임스탬프를 제공합니다.

PostgreSQL에서 NOW()의 대안

NOW() 함수 외에도 시간대와 함께 현재 날짜 및 시간을 가져오는 데 사용할 수 있는 몇 가지 다른 함수가 있습니다. CURRENT_TIME 또는 CURRENT_TIMESTAMP 기능을 사용하여 NOW() 기능과 유사한 결과를 얻으십시오.

다음과 같은 방법으로 사용할 수 있습니다.

SELECT CURRENT_TIMESTAMP, CURRENT_TIME;

출력:

2022-09-14 02:16:21.759315-07 | 02:16:21.759315-07

LOCALTIMELOCALTIMESTAMP와 같은 기능을 사용하여 시간대 없이 현재 타임스탬프를 얻을 수도 있습니다.

SELECT LOCALTIMESTAMP, LOCALTIME;

출력:

2022-09-14 02:16:21.759315 | 02:16:21.759315

시간이 아닌 날짜만 고려하는 이벤트가 있는 경우 NOW()CURRENT_DATE로 대체하면 다음과 같은 방식으로 작동합니다.

SELECT * FROM tablename where dateval > NOW() -interval '1 year';

이제 CURRENT_DATE로 대체합니다.

SELECT * FROM tablename where dateval > CURRENT_DATE() -interval '1 year';

시간이 아닌 날짜만 반환합니다. NOW() 및 위에서 언급한 모든 관련 함수는 현재 트랜잭션의 시작 시간을 반환합니다. 이 함수의 반환 값은 트랜잭션 내에서와 동일합니다.

다음 예는 오해를 풀 수 있습니다.

postgres =# BEGIN;
BEGIN
postgres=# SELECT NOW();
2022-09-14 02:16:21.759315-07 //output
postgres=# SELECT pg_sleep(2);
postgres=# SELECT NOW();
2022-09-14 02:16:21.759315-07 //output
postgres=# COMMIT
COMMIT

여기에서 트랜잭션 전체에서 함수를 호출하고 반환 값은 매번 변경되지 않습니다.

그러나 트랜잭션 전체에서 업데이트되는 현재 날짜 및 시간이 필요한 경우 TIMEOFDAY를 사용하면 가능합니다. 예를 들어 위 트랜잭션과 같은 코드를 수행하면 pg_sleep 이후 2초 동안 현재 날짜와 시간이 증가합니다.

따라서 이 튜토리얼이 NOW() 기능에 도움이 되는 여러 기능과 이를 실행하는 방법을 배우는 데 도움이 되었기를 바랍니다.

작가: 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