표준 SQL의 시간 함수

BigQuery는 다음 TIME 함수를 지원합니다.

CURRENT_TIME

CURRENT_TIME([timezone])

설명

현재 시간을 TIME 객체로 반환합니다.

이 함수는 선택적 timezone 매개변수를 지원합니다. 시간대를 지정하는 방법에 대한 자세한 내용은 시간대 정의를 참조하세요.

반환 데이터 유형

TIME

예시

SELECT CURRENT_TIME() as now;

+----------------------------+
| now                        |
+----------------------------+
| 15:31:38.776361            |
+----------------------------+

TIME

1. TIME(hour, minute, second)
2. TIME(timestamp, [timezone])
3. TIME(datetime)

설명

  1. 시, 분, 초를 나타내는 INT64 값을 사용하여 TIME 객체를 구성합니다.
  2. TIMESTAMP 객체를 사용하여 TIME 객체를 구성합니다. 시간대를 지정하는 선택적 매개변수를 지원합니다. 시간대를 지정하지 않으면 기본 시간대인 UTC가 사용됩니다.
  3. DATETIME 객체를 사용하여 TIME 객체를 구성합니다.

반환 데이터 유형

TIME

예시

SELECT
  TIME(15, 30, 00) as time_hms,
  TIME(TIMESTAMP "2008-12-25 15:30:00+08", "America/Los_Angeles") as time_tstz;

+----------+-----------+
| time_hms | time_tstz |
+----------+-----------+
| 15:30:00 | 23:30:00  |
+----------+-----------+
SELECT TIME(DATETIME "2008-12-25 15:30:00.000000") AS time_dt;

+----------+
| time_dt  |
+----------+
| 15:30:00 |
+----------+

EXTRACT

EXTRACT(part FROM time_expression)

설명

제공된 time_expression에서 지정된 part에 해당하는 값을 반환합니다.

허용되는 part 값은 다음과 같습니다.

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

반환되는 값은 하위의 기간을 자릅니다. 예를 들어 초를 추출할 경우 EXTRACT는 밀리초와 마이크로초 값을 자릅니다.

반환 데이터 유형

INT64

예시

다음 예시에서 EXTRACTHOUR 시간 부분에 해당하는 값을 반환합니다.

SELECT EXTRACT(HOUR FROM TIME "15:30:00") as hour;

+------------------+
| hour             |
+------------------+
| 15               |
+------------------+

TIME_ADD

TIME_ADD(time_expression, INTERVAL int64_expression part)

설명

partint64_expression 단위를 TIME 객체에 추가합니다.

TIME_ADDpart에 다음 값을 지원합니다.

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

이 함수는 값이 00:00:00~24:00:00 경계를 벗어나면 자동으로 조정합니다. 예를 들어 23:30:00에 한 시간을 더하면 반환되는 값은 00:30:00입니다.

반환 데이터 유형

TIME

예시

SELECT
  TIME "15:30:00" as original_time,
  TIME_ADD(TIME "15:30:00", INTERVAL 10 MINUTE) as later;

+-----------------------------+------------------------+
| original_time               | later                  |
+-----------------------------+------------------------+
| 15:30:00                    | 15:40:00               |
+-----------------------------+------------------------+

TIME_SUB

TIME_SUB(time_expression, INTERVAL int64_expression part)

설명

TIME 객체에서 partint64_expression 단위를 뺍니다.

TIME_SUBpart에 다음 값을 지원합니다.

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

이 함수는 값이 00:00:00~24:00:00 경계를 벗어나면 자동으로 조정합니다. 예를 들어 00:30:00에서 한 시간을 빼면 반환되는 값은 23:30:00입니다.

반환 데이터 유형

TIME

예시

SELECT
  TIME "15:30:00" as original_date,
  TIME_SUB(TIME "15:30:00", INTERVAL 10 MINUTE) as earlier;

+-----------------------------+------------------------+
| original_date                | earlier                |
+-----------------------------+------------------------+
| 15:30:00                    | 15:20:00               |
+-----------------------------+------------------------+

TIME_DIFF

TIME_DIFF(time_expression_a, time_expression_b, part)

설명

TIME 객체(time_expression_a - time_expression_b) 간에 지정된 전체 part 간격의 수를 반환합니다. 첫 번째 TIME가 두 번째 객체보다 이전이면 출력이 음수입니다. 두 TIME 객체 간 마이크로초의 차이가 INT64 값을 오버플로하는 경우처럼 계산이 결과 유형을 오버플로하는 경우 오류를 던집니다.

TIME_DIFFpart에 다음 값을 지원합니다.

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

반환 데이터 유형

INT64

예시

SELECT
  TIME "15:30:00" as first_time,
  TIME "14:35:00" as second_time,
  TIME_DIFF(TIME "15:30:00", TIME "14:35:00", MINUTE) as difference;

+----------------------------+------------------------+------------------------+
| first_time                 | second_time            | difference             |
+----------------------------+------------------------+------------------------+
| 15:30:00                   | 14:35:00               | 55                     |
+----------------------------+------------------------+------------------------+

TIME_TRUNC

TIME_TRUNC(time_expression, part)

설명

TIME 객체를 part 단위로 자릅니다.

TIME_TRUNCpart에 다음 값을 지원합니다.

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

반환 데이터 유형

TIME

예시

SELECT
  TIME "15:30:00" as original,
  TIME_TRUNC(TIME "15:30:00", HOUR) as truncated;

+----------------------------+------------------------+
| original                   | truncated              |
+----------------------------+------------------------+
| 15:30:00                   | 15:00:00               |
+----------------------------+------------------------+

FORMAT_TIME

FORMAT_TIME(format_string, time_object)

설명 지정된 format_string에 따라 TIME 객체 형식을 지정합니다. 이 함수가 지원하는 형식 요소 목록은 TIME에 지원되는 형식 요소를 참조하세요.

반환 데이터 유형

STRING

예시

SELECT FORMAT_TIME("%R", TIME "15:30:00") as formatted_time;

+----------------+
| formatted_time |
+----------------+
| 15:30          |
+----------------+

PARSE_TIME

PARSE_TIME(format_string, time_string)

설명

시간의 문자열 표현TIME 객체로 변환합니다.

format_string에는 time_string 형식을 지정하는 방법을 정의하는 형식 요소가 포함됩니다. time_string의 각 요소는 format_string에 해당하는 요소가 있어야 합니다. format_string에 있는 각 요소의 위치는 time_string에 있는 각 요소의 위치와 일치해야 합니다.

-- This works because elements on both sides match.
SELECT PARSE_TIME("%I:%M:%S", "07:30:00")

-- This doesn't work because the seconds element is in different locations.
SELECT PARSE_TIME("%S:%I:%M", "07:30:00")

-- This doesn't work because one of the seconds elements is missing.
SELECT PARSE_TIME("%I:%M", "07:30:00")

-- This works because %T can find all matching elements in time_string.
SELECT PARSE_TIME("%T", "07:30:00")

형식 문자열은 %P를 제외한 대부분의 형식 요소를 완벽하게 지원합니다.

PARSE_TIME를 사용할 때는 다음 사항에 유의하세요.

  • 미지정 필드. 지정하지 않은 필드는 00:00:00.0부터 초기화됩니다. 예를 들어 seconds가 지정되지 않으면 00이 기본값이 되고 나머지도 마찬가지입니다.
  • 공백: 형식 문자열에 하나 이상의 공백이 연달아 있는 경우는 TIME 문자열에 0개 이상의 공백이 연달아 있는 것과 같습니다. 또한 TIME 문자열의 선행 및 후행 공백은 형식 문자열에 없더라도 언제나 허용됩니다.
  • 형식 우선순위. 2개(또는 그 이상)의 형식 요소에 겹치는 정보가 있을 경우, 일반적으로 마지막 요소가 앞의 요소보다 우선합니다.

반환 데이터 유형

TIME

예시

SELECT PARSE_TIME("%H", "15") as parsed_time;

+-------------+
| parsed_time |
+-------------+
| 15:00:00    |
+-------------+
SELECT PARSE_TIME('%I:%M:%S %p', '2:23:38 PM') AS parsed_time

+-------------+
| parsed_time |
+-------------+
| 14:23:38    |
+-------------+

TIME에 지원되는 형식 요소

달리 명시되지 않는 한, 형식 문자열을 사용하는 TIME 함수는 다음 요소를 지원합니다.

형식 요소 설명
%H 시간(24시간제)을 10진수(00~23)로 표현한 것입니다.
%I 시간(12시간제)을 10진수(01~12)로 표현한 것입니다.
%k 시간(24시간제)을 10진수(0~23)로 표현한 것입니다. 한 자릿수 앞에는 공백이 옵니다.
%l 시간(12시간제)을 10진수(1~12)로 표현한 것입니다. 한 자릿수 앞에는 공백이 옵니다.
%M 분을 10진수(00-59)로 표현한 것입니다.
%n 줄바꿈 문자입니다.
%P am 또는 pm입니다.
%p AM 또는 PM입니다.
%R %H:%M 형식으로 표현한 시간입니다.
%r AM/PM 표기법을 사용한 12시간제 시간입니다.
%S 초를 10진수(00-60)로 표현한 것입니다.
%T %H:%M:%S 형식으로 표현한 시간입니다.
%t 탭 문자입니다.
%X 시간을 HH:MM:SS 형식으로 표현한 것입니다.
%% 단일 % 문자입니다.
%E#S 초를 #자리 소수의 정밀도로 표현한 것입니다.
%E*S 초를 전체 소수 자릿수로 표현한 것입니다(리터럴 '*').