날짜 및 시간 데이터 타입

Snowflake는 날짜, 시간, 타임스탬프(날짜 + 시간의 결합)를 관리하기 위한 데이터 타입을 지원합니다. Snowflake는 날짜, 시간, 타임스탬프 조작에 사용되는 문자열 상수에 대한 형식도 지원합니다.

데이터 타입

Snowflake는 다음과 같은 날짜 및 시간 데이터 타입을 지원합니다.

참고

DATE 및 TIMESTAMP 데이터의 경우 Snowflake는 1582년에서 9999년 사이의 연도를 사용할 것을 권장합니다. Snowflake는 이 범위 밖의 연도를 허용하지만, 그레고리력의 제한 으로 인해 1582년 이전 연도는 피해야 합니다.

DATE

Snowflake는 날짜를 저장하기 위한 단일 DATE 데이터 타입(시간 요소 없음)을 지원합니다.

DATE는 가장 일반적인 형식(YYYY-MM-DD, DD-MON-YYYY 등)의 날짜를 허용합니다.

또한 허용되는 모든 TIMESTAMP 값은 날짜에 유효한 입력값이지만 TIME 정보는 잘립니다.

DATETIME

DATETIME는 TIMESTAMP_NTZ와 동의어입니다.

TIME

Snowflake는 시간을 HH:MI:SS 형식으로 저장하기 위한 단일 TIME 데이터를 지원합니다.

TIME은 소수 초에 대한 선택적 정밀도 매개 변수를 지원합니다(예: TIME(3)). 시간 정밀도는 0(초)~9(나노초)의 범위로 지정할 수 있습니다. 기본 정밀도는 9입니다.

모든 TIME 값은 00:00:0023:59:59.999999999 사이의 값이어야 합니다. TIME은 내부적으로 “wallclock” 시간을 저장하며 TIME 값에 대한 모든 작업은 타임존을 고려하지 않고 수행됩니다.

TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ

Snowflake는 타임스탬프의 세 가지 변형을 지원합니다.

TIMESTAMP_LTZ:

TIMESTAMP_LTZ는 내부적으로 지정된 정밀도로 UTC 값을 저장합니다. 그러나 모든 작업은 TIMEZONE 세션 매개 변수로 제어되는 현재 세션의 타임존에서 수행됩니다.

TIMESTAMP_LTZ와 동의어입니다.

  • TIMESTAMPLTZ

  • TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP_NTZ:

TIMESTAMP_NTZ는 내부적으로 지정된 정밀도로 “wallclock” 시간을 저장합니다. 모든 작업은 타임존을 고려하지 않고 수행됩니다.

출력 형식에 타임존이 포함된 경우 UTC 표시기(Z)가 표시됩니다.

TIMESTAMP_NTZ가 TIMESTAMP의 기본값입니다.

TIMESTAMP_NTZ와 동의어입니다.

  • TIMESTAMPNTZ

  • TIMESTAMP WITHOUT TIME ZONE

  • DATETIME

TIMESTAMP_TZ:

TIMESTAMP_TZ는 연결된 *타임존 오프셋*과 함께 UTC 값을 내부적으로 저장합니다. 타임존이 제공되지 않으면 세션 타임존 오프셋이 사용됩니다. 모든 작업은 각 레코드에 특정한 타임존 오프셋으로 수행됩니다.

TIMESTAMP_TZ와 동의어입니다.

  • TIMESTAMPTZ

  • TIMESTAMP WITH TIME ZONE

TIMESTAMP_TZ 값은 UTC의 시간을 기준으로 비교됩니다. 예를 들어 다음과 같이 서로 다른 타임존의 서로 다른 시간을 비교할 때 두 값이 UTC로는 같은 시간이므로 TRUE가 반환됩니다.

SELECT '2024-01-01 00:00:00 +0000'::TIMESTAMP_TZ = '2024-01-01 01:00:00 +0100'::TIMESTAMP_TZ;
Copy

주의

TIMESTAMP_TZ는 현재 주어진 값에 대해 생성되는 순간에 실제 타임존 이 아니라 주어진 타임존의 오프셋 만 저장합니다. 이는 UTC에서는 사용하지 않는 일광 절약 시간제의 경우 특히 중요합니다.

예를 들어 TIMEZONE 매개 변수를 "America/Los_Angeles" 로 설정한 상태에서 값을 주어진 연도의 1월에 TIMESTAMP_TZ로 변환하면 -0800 의 타임존 오프셋이 저장됩니다. 나중에 이 값에 6개월을 추가하면 7월에 로스앤젤레스에 대한 오프셋이 -0700 이더라도 -0800 오프셋이 유지됩니다. 이는 이 값이 생성된 후에는 실제 타임존 정보("America/Los_Angeles")를 더 이상 사용할 수 없기 때문입니다. 다음 코드 샘플에서 이 동작을 보여줍니다.

SELECT '2024-01-01 12:00:00'::TIMESTAMP_TZ;
Copy
+-------------------------------------+
| '2024-01-01 12:00:00'::TIMESTAMP_TZ |
|-------------------------------------|
| 2024-01-01 12:00:00.000 -0800       |
+-------------------------------------+
SELECT DATEADD(MONTH, 6, '2024-01-01 12:00:00'::TIMESTAMP_TZ);
Copy
+--------------------------------------------------------+
| DATEADD(MONTH, 6, '2024-01-01 12:00:00'::TIMESTAMP_TZ) |
|--------------------------------------------------------|
| 2024-07-01 12:00:00.000 -0800                          |
+--------------------------------------------------------+

TIMESTAMP

Snowflake에서 TIMESTAMP는 TIMESTAMP_* 변형 중 하나와 연결된 사용자 지정 별칭입니다. TIMESTAMP가 사용되는 모든 작업에서 연결된 TIMESTAMP_* 변형이 자동으로 사용됩니다. TIMESTAMP 데이터 타입은 테이블에 저장되지 않습니다.

TIMESTAMP와 연결된 TIMESTAMP_* 변형은 TIMESTAMP_TYPE_MAPPING 세션 매개 변수에 의해 지정됩니다. 기본값은 TIMESTAMP_NTZ입니다.

TIMESTAMP 별칭뿐 아니라 모든 타임스탬프 변형은 소수 초에 대한 선택적 정밀도 매개 변수도 지원합니다(예: TIMESTAMP(3)). 타임스탬프 정밀도는 0(초)~9(나노초)의 범위로 지정할 수 있습니다. 기본 정밀도는 9입니다.

타임스탬프 예

다음 예에서는 다양한 타임스탬프를 사용하여 테이블을 만듭니다.

먼저 (TIMESTAMP_NTZ에 매핑된) TIMESTAMP 열이 있는 테이블을 만듭니다.

ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = TIMESTAMP_NTZ;

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP);

DESC TABLE ts_test;
Copy
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+
| name | type             | kind   | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------|
| TS   | TIMESTAMP_NTZ(9) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+

다음으로, TIMESTAMP 변형 중 하나(TIMESTAMP_LTZ)를 명시적으로 사용합니다.

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_LTZ);

DESC TABLE ts_test;
Copy
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+
| name | type             | kind   | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------|
| TS   | TIMESTAMP_LTZ(9) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+

다양한 타임존과 함께 TIMESTAMP_LTZ 사용하기:

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_LTZ);

ALTER SESSION SET TIMEZONE = 'America/Los_Angeles';

INSERT INTO ts_test VALUES('2024-01-01 16:00:00');
INSERT INTO ts_test VALUES('2024-01-02 16:00:00 +00:00');
Copy

이 쿼리는 1월 2일의 해당 시간이 로스앤젤레스 현지 기준 08:00(UTC 기준으로는 16:00)임을 보여줍니다.

SELECT ts, HOUR(ts) FROM ts_test;
Copy
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 16:00:00.000 -0800 |       16 |
| 2024-01-02 08:00:00.000 -0800 |        8 |
+-------------------------------+----------+

다음으로, 이 시간은 다른 타임존에 따라 변경됩니다.

ALTER SESSION SET TIMEZONE = 'America/New_York';

SELECT ts, HOUR(ts) FROM ts_test;
Copy
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 19:00:00.000 -0500 |       19 |
| 2024-01-02 11:00:00.000 -0500 |       11 |
+-------------------------------+----------+

테이블을 생성하고 TIMESTAMP_NTZ를 사용합니다.

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_NTZ);

ALTER SESSION SET TIMEZONE = 'America/Los_Angeles';

INSERT INTO ts_test VALUES('2024-01-01 16:00:00');
INSERT INTO ts_test VALUES('2024-01-02 16:00:00 +00:00');
Copy

다른 타임존의 두 가지 시간 모두 동일한 “현지” 시간으로 변환된다는 점에 유의하십시오.

SELECT ts, HOUR(ts) FROM ts_test;
Copy
+-------------------------+----------+
| TS                      | HOUR(TS) |
|-------------------------+----------|
| 2024-01-01 16:00:00.000 |       16 |
| 2024-01-02 16:00:00.000 |       16 |
+-------------------------+----------+

다음으로, 세션 타임존을 변경해도 결과에는 영향을 미치지 않습니다.

ALTER SESSION SET TIMEZONE = 'America/New_York';

SELECT ts, HOUR(ts) FROM ts_test;
Copy
+-------------------------+----------+
| TS                      | HOUR(TS) |
|-------------------------+----------|
| 2024-01-01 16:00:00.000 |       16 |
| 2024-01-02 16:00:00.000 |       16 |
+-------------------------+----------+

테이블을 생성하고 TIMESTAMP_TZ를 사용합니다.

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_TZ);

ALTER SESSION SET TIMEZONE = 'America/Los_Angeles';

INSERT INTO ts_test VALUES('2024-01-01 16:00:00');
INSERT INTO ts_test VALUES('2024-01-02 16:00:00 +00:00');
Copy

1월 1일 레코드는 세션 타임존을 상속했고 America/Los_Angeles 는 숫자형 타임존 오프셋으로 변환되었습니다.

SELECT ts, HOUR(ts) FROM ts_test;
Copy
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 16:00:00.000 -0800 |       16 |
| 2024-01-02 16:00:00.000 +0000 |       16 |
+-------------------------------+----------+

다음으로, 세션 타임존을 변경해도 결과에는 영향을 미치지 않습니다.

ALTER SESSION SET TIMEZONE = 'America/New_York';

SELECT ts, HOUR(ts) FROM ts_test;
Copy
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 16:00:00.000 -0800 |       16 |
| 2024-01-02 16:00:00.000 +0000 |       16 |
+-------------------------------+----------+

지원되는 달력

Snowflake는 모든 날짜와 타임스탬프에 그레고리력을 사용합니다. 그레고리력은 1582년부터 시작하는 달력이지만 이전 연도를 인식하며, 이는 Snowflake가 율리우스력과 일치하도록 1582년 이전의 날짜(또는 1582년 이전의 날짜를 포함하는 계산)를 조정하지 않으므로 유의해야 할 중요한 사항입니다. UUUU 형식 요소는 음수 연도를 지원합니다.

날짜 및 시간 형식

이러한 모든 데이터 타입은 가장 모호하지 않은 날짜, 시간 또는 날짜 + 시간 형식을 허용합니다. 형식을 자동으로 감지하도록 구성되어 있을 때 Snowflake가 인식하는 형식은 AUTO 감지에서 지원되는 형식 섹션을 참조하십시오.

또한 날짜 및 시간 형식을 수동으로 지정 할 수도 있습니다. 형식을 지정할 때 다음 표에 나열된 대/소문자를 구분하지 않는 요소를 사용할 수 있습니다.

형식 요소

설명

YYYY

4자리 숫자 [1] 연도입니다.

YY

2자리 숫자 [1] 연도로, TWO_DIGIT_CENTURY_START 세션 매개 변수에 의해 제어됩니다. 예를 들어, 1980`으로 설정하면 :code:`7980 값은 각각 2079 및 :code:`1980`으로 구문 분석됩니다.

MM

2자리 숫자 [1] 월(:code:`01`= 1월 등)입니다.

MON

Abbreviated month name [2].

MMMM

Full month name [2].

DD

2자리 숫자 [1] 월의 일(01``~``31)입니다.

DY

간략한 요일입니다.

HH24

2자리 숫자 [1] 시간(00``~``23)입니다. AM/PM`으로 지정하면 :emph:`안 됩니다.

HH12

2자리 숫자 [1] 시간(01``~``12)입니다. AM/:code:`PM`으로 지정할 수 있습니다.

AM , PM

오전(AM) / 오후(PM). HH12 와만 함께 사용하십시오(HH24 와 함께 사용하지 않음).

MI

2자리 숫자 [1] 분(00``~``59)입니다.

SS

2자리 숫자 [1] 초(00``~``59)입니다.

FF[0-9]

0 (초) ~ 9 (나노초) 전체 자릿수의 소수 자리 초입니다. 예: FF, FF0, FF3, FF9. FF 를 지정하는 것은 FF9 (나노초)와 같습니다.

TZH:TZM , TZHTZM , TZH

2자리 숫자:sup:[1] 타임존 시간 및 분, UTC의 오프셋입니다. 부호에 +/:code:`-`를 접두사로 사용할 수 있습니다.

UUUU

ISO 형식 의 4자리 연도이며, BCE 연도의 경우 음수입니다.

[1] 자릿수는 값을 텍스트로 직렬화할 때 생성되는 출력을 설명합니다. 텍스트를 구문 분석할 때 Snowflake는 지정된 자릿수까지 허용합니다. 예를 들어, 요일 숫자는 1자리 또는 2자리 숫자일 수 있습니다.

[2] For the MON format element, the output produced when serializing values to text is the abbreviated month name. For the MMMM format element, the output produced when serializing values to text is the full month name. When parsing text, Snowflake accepts the three-digit abbreviation or the full month name for both MON and MMMM. For example, “January” or “Jan”, “February” or “Feb”, and so on are accepted when parsing text.

참고

  • 날짜 전용 형식을 사용하는 경우 연결된 시간은 해당 날짜의 자정으로 간주됩니다.

  • 큰따옴표 사이에 있는 형식이나 위 요소 이외의 형식으로 된 항목은 모두 해석되지 않고 구문 분석/형식 지정됩니다.

  • 유효한 범위, 자릿수, 모범 사례에 대한 자세한 내용은 날짜, 시간 및 타임스탬프 형식 사용에 대한 추가 정보 섹션을 참조하십시오.

날짜 및 시간 형식 사용 예

다음은 FF 를 사용하여 출력의 소수 초 필드에 9자리 숫자가 있음을 나타내는 예입니다.

CREATE OR REPLACE TABLE timestamp_demo_table(
  tstmp TIMESTAMP,
  tstmp_tz TIMESTAMP_TZ,
  tstmp_ntz TIMESTAMP_NTZ,
  tstmp_ltz TIMESTAMP_LTZ);
INSERT INTO timestamp_demo_table (tstmp, tstmp_tz, tstmp_ntz, tstmp_ltz) VALUES (
  '2024-03-12 01:02:03.123456789',
  '2024-03-12 01:02:03.123456789',
  '2024-03-12 01:02:03.123456789',
  '2024-03-12 01:02:03.123456789');
Copy
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
ALTER SESSION SET TIMESTAMP_TZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
ALTER SESSION SET TIMESTAMP_LTZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
Copy
SELECT tstmp, tstmp_tz, tstmp_ntz, tstmp_ltz
  FROM timestamp_demo_table;
Copy
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| TSTMP                         | TSTMP_TZ                      | TSTMP_NTZ                     | TSTMP_LTZ                     |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2024-03-12 01:02:03.123456789 | 2024-03-12 01:02:03.123456789 | 2024-03-12 01:02:03.123456789 | 2024-03-12 01:02:03.123456789 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+

날짜 및 시간 상수

상수 (리터럴 이라고도 함)는 고정 데이터 값입니다. Snowflake는 문자열 상수를 사용하여 고정 날짜, 시간 또는 타임스탬프 값을 지정할 수 있도록 지원합니다. 문자열 상수는 항상 구분 기호 문자로 묶어야 합니다. Snowflake는 작은따옴표를 사용하여 문자열 상수를 구분할 수 있도록 지원합니다.

예:

DATE '2024-08-14'
TIME '10:03:56'
TIMESTAMP '2024-08-15 10:59:43'
Copy

이 문자열은 다음 매개 변수를 통해 설정된 바와 같이, 데이터 타입에 대한 입력 형식을 기준으로 DATE, TIME 또는 TIMESTAMP 값으로 구문 분석됩니다.

DATE:

DATE_INPUT_FORMAT

TIME:

TIME_INPUT_FORMAT

TIMESTAMP:

TIMESTAMP_INPUT_FORMAT

예를 들어 테이블의 열에 특정 날짜를 삽입하는 방법은 다음과 같습니다.

CREATE TABLE t1 (d1 DATE);

INSERT INTO t1 (d1) VALUES (DATE '2024-08-15');
Copy

간격 상수

간격 상수를 사용하여 날짜, 시간 또는 타임스탬프에 기간을 더하거나 뺄 수 있습니다. 간격 상수는 다음 구문을 가진 INTERVAL 키워드를 사용하여 구현됩니다.

{ + | - } INTERVAL '<integer> [ <date_time_part> ] [ , <integer> [ <date_time_part> ] ... ]'
Copy

모든 문자열 상수와 마찬가지로, Snowflake에는 간격 상수를 구분하는 작은따옴표가 필요합니다.

INTERVAL 키워드는 정수를 하나 이상 지원하며, 선택적으로 날짜 또는 시간 부분을 하나 이상 지원합니다. 예:

  • INTERVAL '1 year' 는 1년을 나타냅니다.

  • INTERVAL '4 years, 5 months, 3 hours' 는 4년, 5개월, 3시간을 나타냅니다.

날짜 또는 시간 부분이 지정되지 않은 경우 간격은 초를 나타냅니다(예: INTERVAL '2'INTERVAL '2 seconds' 와 동일). 이는 날짜 산술을 수행하는 기본 시간 단위와는 다르다는 점에 유의하십시오. 자세한 내용은 날짜에 대한 간단한 산술 섹션을 참조하십시오.

지원되는 날짜 및 시간 부분의 목록은 간격에 대해 지원되는 날짜 및 시간 부분 을 참조하십시오.

참고

  • 간격 증분 순서가 중요합니다. 나열된 순서대로 증분을 더하거나 뺍니다. 예:

    • INTERVAL '1 year, 1 day' 는 먼저 한 해를 더하거나 뺀 다음 하루를 더하거나 뺍니다.

    • INTERVAL '1 day, 1 year' 는 먼저 하루를 더하거나 뺀 다음 한 해를 더하거나 뺍니다.

    순서 차이는 윤년과 같은 달력 이벤트의 영향을 받는 계산에 영향을 줄 수 있습니다.

    SELECT TO_DATE ('2019-02-28') + INTERVAL '1 day, 1 year';
    
    Copy
    +---------------------------------------------------+
    | TO_DATE ('2019-02-28') + INTERVAL '1 DAY, 1 YEAR' |
    |---------------------------------------------------|
    | 2020-03-01                                        |
    +---------------------------------------------------+
    
    SELECT TO_DATE ('2019-02-28') + INTERVAL '1 year, 1 day';
    
    Copy
    +---------------------------------------------------+
    | TO_DATE ('2019-02-28') + INTERVAL '1 YEAR, 1 DAY' |
    |---------------------------------------------------|
    | 2020-02-29                                        |
    +---------------------------------------------------+
    
  • INTERVAL은 데이터 타입이 아닙니다(즉, 테이블 열을 데이터 타입 INTERVAL이 되도록 정의할 수 없음). 간격은 날짜, 시간 및 타임스탬프 산술에만 사용할 수 있습니다.

  • SQL 변수 와 함께 간격을 사용할 수는 없습니다. 예를 들어, 다음 쿼리는 오류를 반환합니다.

    SET v1 = '1 year';
    
    SELECT TO_DATE('2023-04-15') + INTERVAL $v1;
    
    Copy

간격에 대해 지원되는 날짜 및 시간 부분

INTERVAL 키워드는 다음의 날짜 및 시간 부분을 인자로 지원합니다(대/소문자 구분 안 함).

날짜 또는 시간 부분

약어/변형

year

y , yy , yyy , yyyy , yr , years , yrs

quarter

q , qtr , qtrs , quarters

month

mm , mon , mons , months

week

w , wk , weekofyear , woy , wy , weeks

day

d , dd , days, dayofmonth

hour

h , hh , hr , hours , hrs

minute

m , mi , min , minutes , mins

second

s , sec , seconds , secs

millisecond

ms , msec , milliseconds

microsecond

us , usec , microseconds

nanosecond

ns , nsec , nanosec , nsecond , nanoseconds , nanosecs , nseconds

간격의 예

특정 날짜에 연도 간격 추가하기:

SELECT TO_DATE('2023-04-15') + INTERVAL '1 year';
Copy
+-------------------------------------------+
| TO_DATE('2023-04-15') + INTERVAL '1 YEAR' |
|-------------------------------------------|
| 2024-04-15                                |
+-------------------------------------------+

특정 시간에 3시간 18분 간격을 추가합니다.

SELECT TO_TIME('04:15:29') + INTERVAL '3 hours, 18 minutes';
Copy
+------------------------------------------------------+
| TO_TIME('04:15:29') + INTERVAL '3 HOURS, 18 MINUTES' |
|------------------------------------------------------|
| 07:33:29                                             |
+------------------------------------------------------+

CURRENT_TIMESTAMP 함수의 출력에 복합적 간격 추가하기:

SELECT CURRENT_TIMESTAMP + INTERVAL
    '1 year, 3 quarters, 4 months, 5 weeks, 6 days, 7 minutes, 8 seconds,
    1000 milliseconds, 4000000 microseconds, 5000000001 nanoseconds'
  AS complex_interval1;
Copy

다음은 샘플 출력입니다. 현재 타임스탬프가 다르면 출력 내용이 달라집니다.

+-------------------------------+
| COMPLEX_INTERVAL1             |
|-------------------------------|
| 2026-11-07 18:07:19.875000001 |
+-------------------------------+

축약된 날짜/시간 부분 표기법으로 특정 날짜에 복합적 간격 추가하기:

SELECT TO_DATE('2025-01-17') + INTERVAL
    '1 y, 3 q, 4 mm, 5 w, 6 d, 7 h, 9 m, 8 s,
    1000 ms, 445343232 us, 898498273498 ns'
  AS complex_interval2;
Copy
+-------------------------------+
| COMPLEX_INTERVAL2             |
|-------------------------------|
| 2027-03-30 07:31:32.841505498 |
+-------------------------------+

직원 정보 테이블을 쿼리하고 지난 2년 3개월 이내에 고용된 직원의 이름 반환하기:

SELECT name, hire_date
  FROM employees
  WHERE hire_date > CURRENT_DATE - INTERVAL '2 y, 3 month';
Copy

t1 로 명명된 테이블에서 ts 로 명명된 TIMESTAMP 열을 필터링하고 반환된 각각의 값에 4초 추가하기:

SELECT ts + INTERVAL '4 seconds'
  FROM t1
  WHERE ts > TO_TIMESTAMP('2024-04-05 01:02:03');
Copy

날짜에 대한 간단한 산술

간격 상수를 사용하여 날짜, 시간, 타임스탬프를 더하거나 뺄 수 있을 뿐만 아니라, { + | - } integer 형식으로 DATE 값에 일수를 더하거나 뺄 수도 있으며, 여기서 integer 는 더하거나 뺄 일수를 지정합니다.

참고

TIME 및 TIMESTAMP 값은 아직 간단한 산술을 지원하지 않습니다.

날짜 산술의 예

특정 날짜에 1일 더하기:

SELECT TO_DATE('2024-04-15') + 1;
Copy
+---------------------------+
| TO_DATE('2024-04-15') + 1 |
|---------------------------|
| 2024-04-16                |
+---------------------------+

특정 날짜에서 4일 빼기:

SELECT TO_DATE('2024-04-15') - 4;
Copy
+---------------------------+
| TO_DATE('2024-04-15') - 4 |
|---------------------------|
| 2024-04-11                |
+---------------------------+

employees 로 명명된 테이블을 쿼리하고 퇴사했지만 365일 이상 근무했던 사람들의 이름 반환하기:

SELECT name
  FROM employees
  WHERE end_date > start_date + 365;
Copy