함수, 연산자, 조건부

이 주제에서는 함수, 연산자, 조건식의 모음을 다룹니다.

함수 호출 방법, 함수 호출 규칙, SAFE 프리픽스, 특수한 인수 유형에 대한 자세한 내용은 함수 호출을 참조하세요.


연산자 및 조건부

연산자

연산자는 특수문자나 키워드로 표현되며 함수 호출 구문을 사용하지 않습니다. 연산자는 피연산자라고도 불리는 임의 수의 데이터 입력을 조작하여 결과를 반환합니다.

일반 규칙:

  • 달리 명시되지 않는 한, 피연산자 중 하나가 NULL이면 모든 연산자가 NULL을 반환합니다.
  • 계산 결과가 오버플로인 경우 모든 연산자가 오류를 생성합니다.
  • 모든 부동 소수점 연산에서 +/-infNaN은 피연산자 중 하나가 +/-inf 또는 NaN일 때만 반환될 수 있습니다. 그 이외의 경우에는 오류가 반환됩니다.

연산자 우선순위

아래 표에서는 모든 BigQuery 연산자를 우선순위(즉, 문 내에서 평가되는 순서)대로 나열합니다.

우선순위 연산자 입력 데이터 유형 이름 연산자 항
1 필드 액세스 연산자 JSON
STRUCT
필드 액세스 연산자 이항
  배열 아래 첨자 연산자 ARRAY 배열 위치. OFFSET 또는 ORDINAL과 함께 사용해야 함. ARRAY 함수 참조. 이항
  JSON 아래 첨자 연산자 JSON JSON의 필드 이름 또는 배열 위치 이항
2 + 모든 숫자 유형 단항 덧셈 단항
  - 모든 숫자 유형 단항 뺄셈 단항
  ~ 정수 또는 BYTES 비트 NOT 단항
3 * 모든 숫자 유형 곱셈 이항
  / 모든 숫자 유형 나눗셈 이항
  || STRING, BYTES, ARRAY<T> 연결 연산자 이항
4 + 모든 숫자 유형, INT64를 포함하는 DATE, INTERVAL 덧셈 이항
  - 모든 숫자 유형, INT64를 포함하는 DATE, INTERVAL 뺄셈 이항
5 << 정수 또는 BYTES 비트 왼쪽 시프트 이항
  >> 정수 또는 BYTES 비트 오른쪽 시프트 이항
6 & 정수 또는 BYTES 비트 AND 이항
7 ^ 정수 또는 BYTES 비트 XOR 이항
8 | 정수 또는 BYTES 비트 OR 이항
9(비교 연산자) = 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 같음 이항
  < 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 미만 이항
  > 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 초과 이항
  <= 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 이하 이항
  >= 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 이상 이항
  !=, <> 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 같지 않음 이항
  [NOT] LIKE STRING 및 바이트 지정한 패턴과 일치하지 [않는] 값 이항
  [NOT] BETWEEN 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 지정한 범위 내에 있지 [않은] 값 이항
  [NOT] IN 비교 가능한 모든 유형. 전체 목록은 데이터 유형을 참조하세요. 지정한 값의 집합에 있지 [않은] 값 이항
  IS [NOT] NULL 전체 값이 NULL이 [아님] 단항
  IS [NOT] TRUE BOOL 값이 TRUE가 [아님]. 단항
  IS [NOT] FALSE BOOL 값이 FALSE가 [아님]. 단항
10 NOT BOOL 논리 부정 단항
11 AND BOOL 논리곱 이항
12 OR BOOL 논리합 이항

우선순위가 같은 연산자는 결합된 상태로 유지됩니다. 즉, 이러한 연산자는 그룹화되어 왼쪽에서 시작해서 오른쪽으로 이동합니다. 예를 들어 표현식은 다음과 같습니다.

x AND y AND z

위 표현식의 해석 결과는 다음과 같습니다.

( ( x AND y ) AND z )

표현식:

x * y / z

위 표현식의 해석 결과는 다음과 같습니다.

( ( x * y ) / z )

모든 비교 연산자는 우선순위가 동일하지만 서로 연결되지 않습니다. 따라서 모호해지지 않도록 괄호를 사용해야 합니다. 예를 들면 다음과 같습니다.

(x < y) IS FALSE

필드 액세스 연산자

expression.fieldname[. ...]

설명

필드 값을 가져옵니다. 점 연산자라고도 합니다. 중첩 필드에 액세스하는 데 사용할 수 있습니다. 예를 들면 expression.fieldname1.fieldname2입니다.

입력 유형

  • STRUCT
  • JSON

반환 유형

  • STRUCT의 경우: fieldname의 SQL 데이터 유형입니다. 구조체에서 필드를 찾을 수 없으면 오류가 발생합니다.
  • JSON의 경우: JSON입니다. JSON 값에서 필드를 찾을 수 없으면 SQL NULL이 반환됩니다.

예시

다음 예시에서 표현식은 t.customer이고 필드 액세스 연산은 .address.country입니다. 연산은 연산자(.)를 특정 피연산자(이 경우에는 addresscountry 또는 더 구체적으로 첫 번째 연산은 t.customeraddress, 두 번째 연산은 t.customer.addresscountry)에 적용하는 것입니다.

WITH orders AS (
  SELECT STRUCT(STRUCT('Yonge Street' AS street, 'Canada' AS country) AS address) AS customer
)
SELECT t.customer.address.country FROM orders AS t;

+---------+
| country |
+---------+
| Canada  |
+---------+

배열 아래 첨자 연산자

array_expression[array_subscript_specifier]

array_subscript_specifier:
  position_keyword(index)

position_keyword:
  { OFFSET | SAFE_OFFSET | ORDINAL | SAFE_ORDINAL }

설명

특정 위치의 배열에서 값을 가져옵니다.

입력 유형

  • array_expression: 입력 배열입니다.
  • position_keyword: 배열의 색인을 시작해야 하는 위치와 범위를 벗어난 색인이 처리되는 방법입니다. 선택 가능한 옵션은 다음과 같습니다.
    • OFFSET: 색인은 0에서 시작됩니다. 색인이 범위를 벗어날 경우 오류가 발생합니다.
    • SAFE_OFFSET: 색인은 0에서 시작됩니다. 색인이 범위를 벗어날 경우 NULL을 반환합니다.
    • ORDINAL: 색인은 1부터 시작됩니다. 색인이 범위를 벗어날 경우 오류가 발생합니다.
    • SAFE_ORDINAL: 색인은 1부터 시작됩니다. 색인이 범위를 벗어날 경우 NULL을 반환합니다.
  • index: 배열의 특정 위치를 나타내는 정수입니다.

반환 유형

array_expressionARRAY<T>인 경우, T입니다.

예시

이 예시에서는 배열 아래 첨자 연산자를 사용하여 item_array의 특정 위치에 값을 반환합니다. 이 예시에서는 범위를 벗어난 배열에서 색인(6)을 참조할 때 발생하는 항목도 보여줍니다. SAFE 프리픽스가 포함되면 NULL이 반환되고 그렇지 않으면 오류가 발생합니다.

WITH Items AS (SELECT ["coffee", "tea", "milk"] AS item_array)
SELECT
  item_array,
  item_array[OFFSET(1)] AS item_offset,
  item_array[ORDINAL(1)] AS item_ordinal,
  item_array[SAFE_OFFSET(6)] AS item_safe_offset,
FROM Items

+----------------------------------+--------------+--------------+------------------+
| item_array                       | item_offset  | item_ordinal | item_safe_offset |
+----------------------------------+--------------+--------------+------------------+
| [coffee, tea, milk]              | tea          | coffee       | NULL             |
+----------------------------------+--------------+--------------+------------------+

다음 예시에서 범위를 벗어나고 SAFE 프리픽스가 포함되지 않은 배열에서 색인을 참조하면 오류가 발생합니다.

WITH Items AS (SELECT ["coffee", "tea", "milk"] AS item_array)
SELECT
  item_array[OFFSET(6)] AS item_offset
FROM Items

-- Error. OFFSET(6) is out of range.

JSON 아래 첨자 연산자

json_expression[array_element_id]
json_expression[field_name]

설명

JSON 표현식의 배열 요소 값 또는 필드 값을 가져옵니다. 중첩 데이터에 액세스하는 데 사용할 수 있습니다.

입력 유형

  • JSON expression: 반환할 배열 요소 또는 필드를 포함하는 JSON 표현식입니다.
  • [array_element_id]: 배열에서 0부터 시작하는 색인을 나타내는 INT64 표현식입니다. 음수 값을 입력하거나, 값이 배열의 크기 이상이거나, JSON 표현식이 JSON 배열을 나타내지 않으면 SQL NULL이 반환됩니다.
  • [field_name]: JSON에서 필드 이름을 나타내는 STRING 표현식입니다. 필드 이름을 찾을 수 없거나 JSON 표현식이 JSON 객체가 아니면 SQL NULL이 반환됩니다.

반환 유형

JSON

예시

아래 예시를 참조하세요.

  • json_value는 JSON 표현식입니다.
  • .class는 JSON 필드 액세스입니다.
  • .students는 JSON 필드 액세스입니다.
  • [0]은 JSON 값 배열의 0번째 요소에 액세스하는 요소 오프셋이 있는 JSON 아래 첨자 표현식입니다.
  • ['name']은 필드에 액세스하는 필드 이름이 있는 JSON 아래 첨자 표현식입니다.
SELECT json_value.class.students[0]['name'] AS first_student
FROM
  UNNEST(
    [
      JSON '{"class" : {"students" : [{"name" : "Jane"}]}}',
      JSON '{"class" : {"students" : []}}',
      JSON '{"class" : {"students" : [{"name" : "John"}, {"name": "Jamie"}]}}'])
    AS json_value;

+-----------------+
| first_student   |
+-----------------+
| "Jane"          |
| NULL            |
| "John"          |
+-----------------+

산술 연산자

모든 산술 연산자는 숫자 유형 T의 입력을 허용하며 결과 유형은 아래의 설명에서 달리 명시하지 않는 한 유형 T에 해당합니다.

이름 구문
덧셈 X + Y
뺄셈 X - Y
곱셈 X * Y
나눗셈 X / Y
단항 덧셈 + X
단항 뺄셈 - X

참고: 0으로 나누는 연산은 오류를 반환합니다. 다른 결과를 반환하려면 IEEE_DIVIDE 또는 SAFE_DIVIDE 함수를 사용해 보세요.

덧셈과 곱셈의 결과 유형:

입력INT64NUMERICBIGNUMERICFLOAT64
INT64INT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

나눗셈의 결과 유형:

입력INT64NUMERICBIGNUMERICFLOAT64
INT64FLOAT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

단항 덧셈의 결과 유형:

INPUTINT64NUMERICBIGNUMERICFLOAT64
출력INT64NUMERICBIGNUMERICFLOAT64

단항 뺄셈의 결과 유형:

입력INT64NUMERICBIGNUMERICFLOAT64
출력INT64NUMERICBIGNUMERICFLOAT64

날짜 산술 연산자

연산자 '+'와 '-'는 날짜 산술 연산에 사용할 수 있습니다.

date_expression + int64_expression
int64_expression + date_expression
date_expression - int64_expression

설명

date_expression에서 int64_expression일을 더하거나 뺍니다. 간격이 일 단위로 표시되는 DATE_ADD 또는 DATE_SUB 함수와 동일합니다.

반환 데이터 유형

DATE

예시

SELECT DATE "2020-09-22" + 1 AS day_later, DATE "2020-09-22" - 7 AS week_ago

+------------+------------+
| day_later  | week_ago   |
+------------+------------+
| 2020-09-23 | 2020-09-15 |
+------------+------------+

날짜/시간 빼기

date_expression - date_expression
timestamp_expression - timestamp_expression
datetime_expression - datetime_expression

설명

두 날짜/시간 값 사이의 차이를 정수로 계산합니다.

반환 데이터 유형

INTERVAL

예시

SELECT
  DATE "2021-05-20" - DATE "2020-04-19" AS date_diff,
  TIMESTAMP "2021-06-01 12:34:56.789" - TIMESTAMP "2021-05-31 00:00:00" AS time_diff

+-------------------+------------------------+
| date_diff         | time_diff              |
+-------------------+------------------------+
| 0-0 396 0:0:0     | 0-0 0 36:34:56.789     |
+-------------------+------------------------+

간격 산술 연산자

덧셈 및 뺄셈

date_expression + interval_expression = DATETIME
date_expression - interval_expression = DATETIME
timestamp_expression + interval_expression = TIMESTAMP
timestamp_expression - interval_expression = TIMESTAMP
datetime_expression + interval_expression = DATETIME
datetime_expression - interval_expression = DATETIME

설명

날짜/시간 값에 간격을 더하거나 날짜/시간 값에서 간격을 뺍니다. 예시

SELECT
  DATE "2021-04-20" + INTERVAL 25 HOUR AS date_plus,
  TIMESTAMP "2021-05-02 00:01:02.345" - INTERVAL 10 SECOND AS time_minus;

+-------------------------+--------------------------------+
| date_plus               | time_minus                     |
+-------------------------+--------------------------------+
| 2021-04-21 01:00:00     | 2021-05-02 00:00:52.345+00     |
+-------------------------+--------------------------------+

곱셈 및 나눗셈

interval_expression * integer_expression = INTERVAL
interval_expression / integer_expression = INTERVAL

설명

간격 값을 정수로 곱하거나 나눕니다.

예시

SELECT
  INTERVAL '1:2:3' HOUR TO SECOND * 10 AS mul1,
  INTERVAL 35 SECOND * 4 AS mul2,
  INTERVAL 10 YEAR / 3 AS div1,
  INTERVAL 1 MONTH / 12 AS div2

+----------------+--------------+-------------+--------------+
| mul1           | mul2         | div1        | div2         |
+----------------+--------------+-------------+--------------+
| 0-0 0 10:20:30 | 0-0 0 0:2:20 | 3-4 0 0:0:0 | 0-0 2 12:0:0 |
+----------------+--------------+-------------+--------------+

비트 연산자

모든 비트 연산자는 첫 번째 피연산자와 동일한 유형과 동일한 길이를 반환합니다.

이름 구문 입력 데이터 유형 설명
비트 NOT ~ X 정수 또는 BYTES 각 비트에 대해 논리 부정을 수행하며 주어진 2진수 값의 여집합을 형성합니다.
비트 OR X | Y X: 정수 또는 BYTES
Y: X와 동일한 유형
길이가 같은 비트 패턴 두 개를 취하며 해당 비트의 각 쌍에 포괄적 논리합 연산을 수행합니다. 이 연산자는 X와 Y의 BYTES 길이가 다른 경우 오류를 생성합니다.
비트 XOR X ^ Y X: 정수 또는 BYTES
Y: X와 동일한 유형
길이가 같은 비트 패턴 두 개를 취하며 해당 비트의 각 쌍에 배타적 논리합 연산을 수행합니다. 이 연산자는 X와 Y의 BYTES 길이가 다른 경우 오류를 생성합니다.
비트 AND X & Y X: 정수 또는 BYTES
Y: X와 동일한 유형
길이가 같은 비트 패턴 두 개를 취하며 해당 비트의 각 쌍에 논리곱 연산을 수행합니다. 이 연산자는 X와 Y의 BYTES 길이가 다른 경우 오류를 생성합니다.
왼쪽 시프트 X << Y X: 정수 또는 BYTES
Y: INT64
첫 번째 피연산자 X를 왼쪽으로 옮깁니다. 이 연산자는 두 번째 피연산자 Y가 첫 번째 피연산자 X의 비트 길이보다 크거나 같으면 0 또는 바이트 시퀀스 b'\x00'을 반환합니다(예: X에 유형 INT64가 있으면 64). 이 연산자는 Y가 음수이면 오류를 생성합니다.
오른쪽 시프트 X >> Y X: 정수 또는 BYTES
Y: INT64
첫 번째 피연산자 X를 오른쪽으로 옮깁니다. 이 연산자는 부호가 있는 유형으로 부호 비트 확장을 수행하지 않습니다(즉, 왼쪽에 비어 있는 비트를 0으로 채움). 이 연산자는 두 번째 피연산자 Y가 첫 번째 피연산자 X의 비트 길이보다 크거나 같으면 0 또는 바이트 시퀀스 b'\x00'을 반환합니다(예: X에 유형 INT64가 있으면 64). 이 연산자는 Y가 음수이면 오류를 생성합니다.

논리 연산자

BigQuery는 AND, OR, NOT 논리 연산자를 지원합니다. 논리 연산자는 BOOL 또는 NULL 입력만 허용하고 3가 논리를 사용하여 결과를 생성합니다. 결과는 TRUE, FALSE, 또는 NULL일 수 있습니다.

x y x AND y x OR y
TRUE TRUE TRUE TRUE
TRUE FALSE FALSE TRUE
TRUE NULL NULL TRUE
FALSE TRUE FALSE TRUE
FALSE FALSE FALSE FALSE
FALSE NULL FALSE NULL
NULL TRUE NULL TRUE
NULL FALSE FALSE NULL
NULL NULL NULL NULL
x NOT x
TRUE FALSE
FALSE TRUE
NULL NULL

예시

이 섹션의 예시는 entry_table이라는 테이블을 참조합니다.

+-------+
| entry |
+-------+
| a     |
| b     |
| c     |
| NULL  |
+-------+
SELECT 'a' FROM entry_table WHERE entry = 'a'

-- a => 'a' = 'a' => TRUE
-- b => 'b' = 'a' => FALSE
-- NULL => NULL = 'a' => NULL

+-------+
| entry |
+-------+
| a     |
+-------+
SELECT entry FROM entry_table WHERE NOT (entry = 'a')

-- a => NOT('a' = 'a') => NOT(TRUE) => FALSE
-- b => NOT('b' = 'a') => NOT(FALSE) => TRUE
-- NULL => NOT(NULL = 'a') => NOT(NULL) => NULL

+-------+
| entry |
+-------+
| b     |
| c     |
+-------+
SELECT entry FROM entry_table WHERE entry IS NULL

-- a => 'a' IS NULL => FALSE
-- b => 'b' IS NULL => FALSE
-- NULL => NULL IS NULL => TRUE

+-------+
| entry |
+-------+
| NULL  |
+-------+

비교 연산자

비교는 항상 BOOL을 반환합니다. 비교를 하려면 일반적으로 두 피연산자가 같은 유형이어야 합니다. 피연산자 유형이 다르고 BigQuery가 정밀도를 유지하면서 유형 값을 공통 유형으로 변환할 수 있는 경우 BigQuery는 일반적으로 비교를 위해 값을 공통 유형으로 강제 변환합니다. BigQuery는 일반적으로 리터럴을 비리터럴 유형으로 강제 변환합니다(있는 경우). 비교할 수 있는 데이터 유형은 데이터 유형에 정의되어 있습니다.

STRUCT는 같음(=), 같지 않음(!= 및 <>), IN과 같은 4가지 비교 연산자만 지원합니다.

이러한 데이터 유형을 비교할 때는 다음 규칙이 적용됩니다.

  • FLOAT64: NaN이 포함된 모든 비교는 FALSE를 반환합니다. 단, !=<>은 TRUE를 반환합니다.
  • BOOL: FALSE가 TRUE보다 작습니다.
  • STRING: 코드 포인트별로 문자열을 비교합니다. 즉, 규범적 등가 문자열은 먼저 정규화된 경우에 한해 비교 결과가 같음으로 보장됩니다.
  • NULL: 이 경우에는 입력이 NULL인 모든 연산은 NULL을 반환한다는 규칙이 적용됩니다.
이름 구문 설명
미만 X < Y X가 Y보다 작으면 TRUE를 반환합니다. 이 연산자는 대조 지정을 지원합니다.
이하 X <= Y X가 Y보다 작거나 같으면 TRUE를 반환합니다. 이 연산자는 대조 지정을 지원합니다.
초과 X > Y X가 Y보다 크면 TRUE를 반환합니다. 이 연산자는 대조 지정을 지원합니다.
이상 X >= Y X가 Y보다 크거나 같으면 TRUE를 반환합니다. 이 연산자는 대조 지정을 지원합니다.
같음 X = Y X가 Y와 같으면 TRUE를 반환합니다. 이 연산자는 대조 지정을 지원합니다.
같지 않음 X != Y
X <> Y
X가 Y와 같지 않으면 TRUE를 반환합니다. 이 연산자는 대조 지정을 지원합니다.
BETWEEN X [NOT] BETWEEN Y AND Z

X가 지정한 범위 내에 있지 [않으면] TRUE를 반환합니다. 'X BETWEEN Y AND Z'의 결과는 'Y <= X AND X <= Z'와 같지만 전자의 경우 X가 한 번만 평가됩니다. 이 연산자는 대조 지정을 지원합니다.

LIKE X [NOT] LIKE Y 첫 번째 피연산자 X의 STRING이 두 번째 피연산자 Y에서 지정한 패턴과 일치하는지 확인합니다. 표현식에 다음과 같은 문자를 포함할 수 있습니다.
  • 퍼센트 기호 '%'는 임의의 수의 문자나 바이트와 일치합니다.
  • 밑줄 '_'은 하나의 문자나 바이트와 일치합니다.
  • 백슬래시 두 개를 사용하여 '\', '_' 또는 '%'를 이스케이프 처리할 수 있습니다. "\\%"). 원시 문자열을 사용할 경우 백슬래시 한 개만 필요합니다(예: r"\%").
IN 다양함 - 아래 참조 오른쪽 피연산자가 비어 있으면 FALSE를 반환합니다. 왼쪽 피연산자가 NULL이면 NULL을 반환합니다. 오른쪽 피연산자에 NULL이 포함되어 있으면 TRUE 또는 NULL을 반환하고 절대 FALSE를 반환하지 않습니다. IN의 양쪽에 있는 인수는 일반적인 표현식입니다. 어느 쪽 피연산자도 리터럴일 필요는 없지만 오른쪽에 리터럴을 사용하는 것이 가장 일반적입니다. X는 한 번만 평가됩니다. 이 연산자는 일반적으로 대조 지정을 지원합니다.

STRUCT 데이터 유형의 값이 서로 같은지 테스트할 때, 하나 이상의 필드가 NULL인 경우가 있습니다. 이 경우,

  • NULL이 아닌 모든 필드 값이 같다면 비교 후 NULL이 반환됩니다.
  • NULL이 아닌 필드 값이 같지 않다면 비교 후 false가 반환됩니다.

아래 표는 NULL 값의 필드를 가진 STRUCT 데이터 유형이 어떻게 비교되는지 보여줍니다.

Struct1 Struct2 Struct1 = Struct2
STRUCT(1, NULL) STRUCT(1, NULL) NULL
STRUCT(1, NULL) STRUCT(2, NULL) FALSE
STRUCT(1,2) STRUCT(1, NULL) NULL

EXISTS 연산자

EXISTS ( subquery )

설명

서브 쿼리가 하나 이상의 행을 생성하는 경우 TRUE를 반환합니다. 서브 쿼리가 0개의 행을 생성하는 경우 FALSE를 반환합니다. 절대 NULL을 반환하지 않습니다. EXISTS와 함께 서브 쿼리를 사용하는 방법에 대한 자세한 내용은 EXISTS 서브 쿼리를 참조하세요.

예시

이 예시에서는 Words에 방향이 south인 행이 없으므로 EXISTS 연산자가 FALSE를 반환합니다.

WITH Words AS (
  SELECT 'Intend' as value, 'east' as direction UNION ALL
  SELECT 'Secure', 'north' UNION ALL
  SELECT 'Clarity', 'west'
 )
SELECT EXISTS ( SELECT value FROM Words WHERE direction = 'south' ) as result;

+--------+
| result |
+--------+
| FALSE  |
+--------+

IN 연산자

IN 연산자는 다음 구문을 지원합니다.

search_value [NOT] IN value_set

value_set:
  {
    (expression[, ...])
    | (subquery)
    | UNNEST(array_expression)
  }

설명

값 집합에서 동일 값을 확인합니다. 시맨틱스 규칙이 적용되지만 일반적으로 동일 값이 발견되면 INTRUE를 반환하고, 동일 값이 제외되었으면 FALSE를 반환하고, 그렇지 않으면 NULL을 반환합니다. NOT IN은 동일 값이 발견되면 FALSE를 반환하고, 동일 값이 제외되었으면 TRUE를 반환하고, 그렇지 않으면 NULL을 반환합니다.

  • search_value: 값 집합과 비교되는 표현식입니다.
  • value_set: 검색과 비교할 하나 이상의 값입니다.

    • (expression[, ...]): 표현식 목록입니다.
    • (subquery): 단일 열을 반환하는 서브 쿼리입니다. 해당 열의 값은 값 집합입니다. 행이 생성되지 않으면 값 집합이 비어 있는 것입니다.
    • UNNEST(array_expression): 배열 표현식에서 값 열을 반환하는 UNNEST 연산자입니다. 이는 다음과 동일합니다.

      IN (SELECT element FROM UNNEST(array_expression) AS element)
      

시맨틱스 규칙

IN 연산자를 사용하는 경우 다음 시맨틱스가 이 순서대로 적용됩니다.

  • value_set가 비어 있으면 FALSE를 반환합니다.
  • search_valueNULL인 경우 NULL를 반환합니다.
  • value_setsearch_value와 같은 값이 있으면 TRUE를 반환합니다.
  • value_setNULL이 포함되어 있으면 NULL을 반환합니다.
  • FALSE를 반환합니다.

NOT IN 연산자를 사용하는 경우 다음 시맨틱스가 이 순서대로 적용됩니다.

  • value_set가 비어 있으면 TRUE를 반환합니다.
  • search_valueNULL인 경우 NULL를 반환합니다.
  • value_setsearch_value와 같은 값이 있으면 FALSE를 반환합니다.
  • value_setNULL이 포함되어 있으면 NULL을 반환합니다.
  • TRUE를 반환합니다.

이 연산자는 일반적으로 대조를 지원하지만 x [NOT] IN UNNEST는 지원되지 않습니다.

다음 구문의 시맨틱스는

x IN (y, z, ...)

다음과 동일한 것으로 정의되며

(x = y) OR (x = z) OR ...

서브 쿼리와 배열 형식은 유사하게 정의됩니다.

x NOT IN ...

이 값은 다음과 동일합니다.

NOT(x IN ...)

UNNEST 형식은 배열 스캔을 FROM 절의 UNNEST처럼 취급합니다.

x [NOT] IN UNNEST(<array expression>)

이 형식은 ARRAY 매개변수와 함께 사용되는 경우가 많습니다. 예를 들면 다음과 같습니다.

x IN UNNEST(@array_parameter)

이 구문을 사용하는 방법에 대한 자세한 내용은 배열 주제를 참조하세요.

구조체 생성자 구문을 사용하여 IN을 멀티 파트 키와 함께 사용할 수 있습니다. 예를 들면 다음과 같습니다.

(Key1, Key2) IN ( (12,34), (56,78) )
(Key1, Key2) IN ( SELECT (table.a, table.b) FROM table )

자세한 내용은 구조체 유형을 참조하세요.

반환 데이터 유형

BOOL

예시

다음 예시에서 이러한 WITH 절을 사용하여 WordsItems에 대해 임시 테이블을 에뮬레이션할 수 있습니다.

WITH Words AS (
  SELECT 'Intend' as value UNION ALL
  SELECT 'Secure' UNION ALL
  SELECT 'Clarity' UNION ALL
  SELECT 'Peace' UNION ALL
  SELECT 'Intend'
 )
SELECT * FROM Words;

+----------+
| value    |
+----------+
| Intend   |
| Secure   |
| Clarity  |
| Peace    |
| Intend   |
+----------+
WITH
  Items AS (
    SELECT STRUCT('blue' AS color, 'round' AS shape) AS info UNION ALL
    SELECT STRUCT('blue', 'square') UNION ALL
    SELECT STRUCT('red', 'round')
  )
SELECT * FROM Items;

+----------------------------+
| info                       |
+----------------------------+
| {blue color, round shape}  |
| {blue color, square shape} |
| {red color, round shape}   |
+----------------------------+

IN 및 표현식 예시:

SELECT * FROM Words WHERE value IN ('Intend', 'Secure');

+----------+
| value    |
+----------+
| Intend   |
| Secure   |
| Intend   |
+----------+

NOT IN 및 표현식 예시:

SELECT * FROM Words WHERE value NOT IN ('Intend');

+----------+
| value    |
+----------+
| Secure   |
| Clarity  |
| Peace    |
+----------+

IN, 스칼라 서브 쿼리, 표현식의 예시:

SELECT * FROM Words WHERE value IN ((SELECT 'Intend'), 'Clarity');

+----------+
| value    |
+----------+
| Intend   |
| Clarity  |
| Intend   |
+----------+

INUNNEST 작업의 예시:

SELECT * FROM Words WHERE value IN UNNEST(['Secure', 'Clarity']);

+----------+
| value    |
+----------+
| Secure   |
| Clarity  |
+----------+

INSTRUCT 예시:

SELECT
  (SELECT AS STRUCT Items.info) as item
FROM
  Items
WHERE (info.shape, info.color) IN (('round', 'blue'));

+------------------------------------+
| item                               |
+------------------------------------+
| { {blue color, round shape} info } |
+------------------------------------+

IS 연산자

IS 연산자는 테스트하는 조건에 대해 TRUE 또는 FALSE를 반환합니다. 이 연산자는 수학 함수에서 정의된 IS_INF 및 IS_NAN 함수와 달리 입력이 NULL이어도 절대로 NULL을 반환하지 않습니다. NOT이 있으면 출력 BOOL 값이 반전됩니다.

함수 구문 입력 데이터 유형 결과 데이터 유형 설명

X IS [NOT] NULL
모든 값 유형 BOOL 피연산자 X가 NULL로 평가될 경우 TRUE를 반환하고, 그렇지 않은 경우 FALSE를 반환합니다.

X IS [NOT] TRUE
BOOL BOOL BOOL 피연산자가 TRUE로 평가될 경우 TRUE를 반환하고 그렇지 않은 경우 FALSE를 반환합니다.

X IS [NOT] FALSE
BOOL BOOL BOOL 피연산자가 FALSE로 평가될 경우 TRUE를 반환하고 그렇지 않은 경우 FALSE를 반환합니다.

IS DISTINCT FROM 연산자

expression_1 IS [NOT] DISTINCT FROM expression_2

설명

IS DISTINCT FROM은 입력 값이 DISTINCTGROUP BY 절에서 서로 다르다고 간주되는 경우 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.

TRUE가 되는 a IS DISTINCT FROM b는 다음과 같습니다.

  • SELECT COUNT(DISTINCT x) FROM UNNEST([a,b]) x에서 2 반환
  • SELECT * FROM UNNEST([a,b]) x GROUP BY x에서 행 2개 반환

a IS DISTINCT FROM b는 다음 경우를 제외하고 NOT (a = b)와 동일합니다.

  • 이 연산자는 절대로 NULL을 반환하지 않으므로 NULL 값은 다른 NULL 값이 아닌 NULL이 아닌 값과 구분되는 것으로 간주됩니다.
  • NaN 값은 NaN이 아닌 값과 구분되지만 다른 NaN 값으로 간주되지 않습니다.

입력 유형

  • expression_1: 비교할 첫 번째 값입니다. 그룹화할 수 있는 데이터 유형인 NULL 또는 NaN이 될 수 있습니다.
  • expression_2: 비교할 두 번째 값입니다. 그룹화할 수 있는 데이터 유형인 NULL 또는 NaN이 될 수 있습니다.
  • NOT: 있으면 출력 BOOL 값이 반전됩니다.

반환 유형

BOOL

예시

다음은 TRUE를 반환합니다.

SELECT 1 IS DISTINCT FROM 2
SELECT 1 IS DISTINCT FROM NULL
SELECT 1 IS NOT DISTINCT FROM 1
SELECT NULL IS NOT DISTINCT FROM NULL

다음은 FALSE를 반환합니다.

SELECT NULL IS DISTINCT FROM NULL
SELECT 1 IS DISTINCT FROM 1
SELECT 1 IS NOT DISTINCT FROM 2
SELECT 1 IS NOT DISTINCT FROM NULL

연결 연산자

연결 연산자는 여러 값을 하나로 연결합니다.

함수 구문 입력 데이터 유형 결과 데이터 유형

STRING || STRING [ || ... ]
STRING STRING

BYTES || BYTES [ || ... ]
BYTES STRING

ARRAY<T> || ARRAY<T> [ || ... ]
ARRAY<T> ARRAY<T>

조건식

조건식은 입력의 평가 순서에 제약을 적용하며 기본적으로 단락을 통해 왼쪽에서 오른쪽으로 평가되며 선택된 출력 값만을 평가합니다. 반대로, 정규 함수의 모든 입력은 함수를 호출하기 전에 평가됩니다. 조건식의 단락은 오류 처리나 성능 조정에 유용합니다.

CASE expr

CASE expr
  WHEN expr_to_match THEN result
  [ ... ]
  [ ELSE else_result ]
  END

설명

연속된 각 WHEN 절의 exprexpr_to_match를 비교하여 true를 반환하는 첫 번째 결과를 반환합니다. 나머지 WHEN 절과 else_result는 평가되지 않습니다. expr = expr_to_match 비교가 모든 WHEN 절에 대해 false 또는 NULL을 반환하는 경우 else_result를 반환합니다. 없는 경우 NULL을 반환합니다.

exprexpr_to_match은 모든 유형이 될 수 있습니다. 공통 상위 유형으로 묵시적으로 강제 변환이 가능해야 합니다. 강제된 값에서 동등 비교가 수행됩니다. 여러 result 유형이 있을 수 있습니다. resultelse_result 표현식은 공통 상위 유형으로 강제 변환이 가능해야 합니다.

이 표현식은 대조 지정을 지원합니다.

반환 데이터 유형

result[, ...] 및 else_result상위 유형입니다.

예시

WITH Numbers AS (
  SELECT 90 as A, 2 as B UNION ALL
  SELECT 50, 8 UNION ALL
  SELECT 60, 6 UNION ALL
  SELECT 50, 10
)
SELECT
  A,
  B,
  CASE A
    WHEN 90 THEN 'red'
    WHEN 50 THEN 'blue'
    ELSE 'green'
    END
    AS result
FROM Numbers

+------------------+
| A  | B  | result |
+------------------+
| 90 | 2  | red    |
| 50 | 8  | blue   |
| 60 | 6  | green  |
| 50 | 10 | blue   |
+------------------+

CASE

CASE
  WHEN condition THEN result
  [ ... ]
  [ ELSE else_result ]
  END

설명

연속된 각 WHEN 절의 조건을 평가하고 조건이 true인 첫 번째 결과를 반환합니다. 나머지 WHEN 절과 else_result는 평가되지 않습니다. 모든 조건이 false 또는 NULL이면 else_result를 반환합니다. 존재하지 않으면 NULL을 반환합니다.

condition은 부울 표현식이어야 합니다. 여러 result 유형이 있을 수 있습니다. resultelse_result 표현식은 공통 상위 유형으로 묵시적 강제 변환이 가능해야 합니다.

이 표현식은 대조 지정을 지원합니다.

반환 데이터 유형

result[, ...] 및 else_result상위 유형입니다.

예시

WITH Numbers AS (
  SELECT 90 as A, 2 as B UNION ALL
  SELECT 50, 6 UNION ALL
  SELECT 20, 10
)
SELECT
  A,
  B,
  CASE
    WHEN A > 60 THEN 'red'
    WHEN A > 30 THEN 'blue'
    ELSE 'green'
    END
    AS result
FROM Numbers

+------------------+
| A  | B  | result |
+------------------+
| 90 | 2  | red    |
| 50 | 6  | blue   |
| 20 | 10 | green  |
+------------------+

COALESCE

COALESCE(expr[, ...])

설명

null이 아닌 첫 번째 표현식의 값을 반환합니다. 나머지 표현식은 평가되지 않습니다. 입력 표현식은 모든 유형이 될 수 있습니다. 입력 표현식 유형이 여러 개 있을 수 있습니다. 모든 입력 표현식은 공통 상위 유형으로 묵시적 강제 변환이 가능해야 합니다.

반환 데이터 유형

expr[, ...]의 상위 유형입니다.

예시

SELECT COALESCE('A', 'B', 'C') as result

+--------+
| result |
+--------+
| A      |
+--------+
SELECT COALESCE(NULL, 'B', 'C') as result

+--------+
| result |
+--------+
| B      |
+--------+

IF

IF(expr, true_result, else_result)

설명

expr이 true인 경우 true_result를 반환하고, 그 밖의 경우 else_result를 반환합니다. expr이 true인 경우 else_result가 평가되지 않습니다. expr이 false이거나 NULL이면 true_result가 평가되지 않습니다.

expr은 부울 표현식이어야 합니다. true_resultelse_result는 공통 상위 유형으로 강제 변환이 가능해야 합니다.

반환 데이터 유형

true_resultelse_result상위 유형입니다.

예시

WITH Numbers AS (
  SELECT 10 as A, 20 as B UNION ALL
  SELECT 50, 30 UNION ALL
  SELECT 60, 60
)
SELECT
  A,
  B,
  IF(A < B, 'true', 'false') AS result
FROM Numbers

+------------------+
| A  | B  | result |
+------------------+
| 10 | 20 | true   |
| 50 | 30 | false  |
| 60 | 60 | false  |
+------------------+

IFNULL

IFNULL(expr, null_result)

설명

expr이 NULL이면 null_result를 반환합니다. 그렇지 않은 경우 expr을 반환합니다. expr이 NULL이 아니면 null_result가 평가되지 않습니다.

exprnull_result는 모든 유형이 될 수 있으며 공통 상위 유형으로 묵시적 강제 변환이 가능해야 합니다. COALESCE(expr, null_result)의 동의어입니다.

반환 데이터 유형

expr 또는 null_result상위 유형입니다.

예시

SELECT IFNULL(NULL, 0) as result

+--------+
| result |
+--------+
| 0      |
+--------+
SELECT IFNULL(10, 0) as result

+--------+
| result |
+--------+
| 10     |
+--------+

NULLIF

NULLIF(expr, expr_to_match)

설명

expr = expr_to_match가 true이면 NULL을 반환하고, 그렇지 않으면 expr을 반환합니다.

exprexpr_to_match는 공통 상위 유형으로 묵시적 강제 변환이 가능해야 하며 비교 가능해야 합니다.

이 표현식은 대조 지정을 지원합니다.

반환 데이터 유형

exprexpr_to_match상위 유형입니다.

예시

SELECT NULLIF(0, 0) as result

+--------+
| result |
+--------+
| NULL   |
+--------+
SELECT NULLIF(10, 0) as result

+--------+
| result |
+--------+
| 10     |
+--------+

함수

집계 함수

집계 함수는 그룹의 행을 단일 값으로 요약하는 함수입니다. 집계 함수의 예로는 COUNT, MIN, MAX가 있습니다.

SELECT COUNT(*) as total_count, COUNT(fruit) as non_null_count,
       MIN(fruit) as min, MAX(fruit) as max
FROM (SELECT NULL as fruit UNION ALL
      SELECT "apple" as fruit UNION ALL
      SELECT "pear" as fruit UNION ALL
      SELECT "orange" as fruit)

+-------------+----------------+-------+------+
| total_count | non_null_count | min   | max  |
+-------------+----------------+-------+------+
| 4           | 3              | apple | pear |
+-------------+----------------+-------+------+

GROUP BY 절과 함께 사용하면 일반적으로 요약된 그룹에 하나 이상의 행이 있습니다. 연결된 SELECTGROUP BY 절이 없거나 특정 집계 함수가 요약할 그룹의 행을 필터링하면 집계 함수가 빈 그룹을 요약해야 할 수 있습니다. 이 경우 COUNTCOUNTIF 함수는 0을 반환하고 다른 모든 집계 함수는 NULL을 반환합니다.

다음 섹션에서는 BigQuery가 지원하는 집계 함수를 설명합니다.

ANY_VALUE

ANY_VALUE(
  expression
)
[OVER (...)]

설명

그룹에서 선택한 일부 행의 expression을 반환합니다. 선택할 행은 확정되어 있지 않으며 무작위가 아닙니다. 입력으로 행이 생성되지 않으면 NULL을 반환합니다. 그룹의 모든 행에서 expressionNULL이면 NULL을 반환합니다.

ANY_VALUERESPECT NULLS가 지정된 것처럼 작동합니다. expressionNULL인 행이 고려되고 선택될 수 있습니다.

지원되는 인수 유형

모두

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환되는 데이터 유형

입력 데이터 유형과 일치합니다.

예시

SELECT ANY_VALUE(fruit) as any_value
FROM UNNEST(["apple", "banana", "pear"]) as fruit;

+-----------+
| any_value |
+-----------+
| apple     |
+-----------+
SELECT
  fruit,
  ANY_VALUE(fruit) OVER (ORDER BY LENGTH(fruit) ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS any_value
FROM UNNEST(["apple", "banana", "pear"]) as fruit;

+--------+-----------+
| fruit  | any_value |
+--------+-----------+
| pear   | pear      |
| apple  | pear      |
| banana | apple     |
+--------+-----------+

ARRAY_AGG

ARRAY_AGG(
  [DISTINCT]
  expression
  [{IGNORE|RESPECT} NULLS]
  [ORDER BY key [{ASC|DESC}] [, ... ]]
  [LIMIT n]
)
[OVER (...)]

설명

expression 값의 ARRAY를 반환합니다.

지원되는 인수 유형

ARRAY를 제외한 모든 데이터 유형.

옵션 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 ARRAY_AGG() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.
  3. IGNORE NULLS 또는 RESPECT NULLS: IGNORE NULLS가 지정되면 NULL 값이 결과에서 제외됩니다. RESPECT NULLS가 지정되면 결과에 NULL 값이 포함됩니다. 아무것도 지정되지 않으면 결과에 NULL 값이 포함됩니다. 최종 쿼리 결과의 배열에 NULL 요소가 포함되어 있으면 오류가 발생합니다.
  4. ORDER BY: 값의 순서를 지정합니다.
    • 각 정렬 키의 기본 정렬 방향은 ASC입니다.
    • NULL: ORDER BY 절의 컨텍스트에서 NULL은 최소 가능 값입니다. 즉, ASC 정렬에서는 NULL이 가장 먼저 나타나고 DESC 정렬에서는 마지막으로 나타납니다.
    • 부동 소수점 데이터 유형: 정렬 및 그룹화는 부동 소수점 시맨틱스를 참조하세요.
    • DISTINCT도 지정할 경우 정렬 키는 expression과 동일해야 합니다.
    • ORDER BY를 지정하지 않으면 출력 배열 내 요소 순서가 확정되지 않습니다. 즉, 이 함수를 사용할 때마다 다른 결과가 나올 수 있습니다.
  5. LIMIT: 결과에서 expression 입력의 최대 개수를 지정합니다. 한도 n은 상수 INT64여야 합니다.

반환되는 데이터 유형

ARRAY

0이 입력된 행이 있는 경우, 이 함수는 NULL을 반환합니다.

예시

SELECT ARRAY_AGG(x) AS array_agg FROM UNNEST([2, 1,-2, 3, -2, 1, 2]) AS x;

+-------------------------+
| array_agg               |
+-------------------------+
| [2, 1, -2, 3, -2, 1, 2] |
+-------------------------+
SELECT ARRAY_AGG(DISTINCT x) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

+---------------+
| array_agg     |
+---------------+
| [2, 1, -2, 3] |
+---------------+
SELECT ARRAY_AGG(x IGNORE NULLS) AS array_agg
FROM UNNEST([NULL, 1, -2, 3, -2, 1, NULL]) AS x;

+-------------------+
| array_agg         |
+-------------------+
| [1, -2, 3, -2, 1] |
+-------------------+
SELECT ARRAY_AGG(x ORDER BY ABS(x)) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

+-------------------------+
| array_agg               |
+-------------------------+
| [1, 1, 2, -2, -2, 2, 3] |
+-------------------------+
SELECT ARRAY_AGG(x LIMIT 5) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

+-------------------+
| array_agg         |
+-------------------+
| [2, 1, -2, 3, -2] |
+-------------------+
WITH vals AS
  (
    SELECT 1 x UNION ALL
    SELECT -2 x UNION ALL
    SELECT 3 x UNION ALL
    SELECT -2 x UNION ALL
    SELECT 1 x UNION ALL
  )
SELECT ARRAY_AGG(DISTINCT x ORDER BY x) as array_agg
FROM vals;

+------------+
| array_agg  |
+------------+
| [-2, 1, 3] |
+------------+
WITH vals AS
  (
    SELECT 1 x, 'a' y UNION ALL
    SELECT 1 x, 'b' y UNION ALL
    SELECT 2 x, 'a' y UNION ALL
    SELECT 2 x, 'c' y
  )
SELECT x, ARRAY_AGG(y) as array_agg
FROM vals
GROUP BY x;

+---------------+
| x | array_agg |
+---------------+
| 1 | [a, b]    |
| 2 | [a, c]    |
+---------------+
SELECT
  x,
  ARRAY_AGG(x) OVER (ORDER BY ABS(x)) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;

+----+-------------------------+
| x  | array_agg               |
+----+-------------------------+
| 1  | [1, 1]                  |
| 1  | [1, 1]                  |
| 2  | [1, 1, 2, -2, -2, 2]    |
| -2 | [1, 1, 2, -2, -2, 2]    |
| -2 | [1, 1, 2, -2, -2, 2]    |
| 2  | [1, 1, 2, -2, -2, 2]    |
| 3  | [1, 1, 2, -2, -2, 2, 3] |
+----+-------------------------+

ARRAY_CONCAT_AGG

ARRAY_CONCAT_AGG(
  expression
  [ORDER BY key [{ASC|DESC}] [, ... ]]
  [LIMIT n]
)

설명

ARRAY유형의 expression에서 요소들을 연결하여 단일 ARRAY를 결과로 반환합니다. 이 함수는 NULL 입력 배열은 무시하지만 비 NULL 입력 배열의 NULL 요소는 고려합니다. 하지만 최종 쿼리 결과 배열에 NULL 요소가 포함되어 있으면 오류가 발생합니다.

지원되는 인수 유형

ARRAY

옵션 절

절은 다음 순서로 적용됩니다.

  1. ORDER BY: 값의 순서를 지정합니다.
    • 각 정렬 키의 기본 정렬 방향은 ASC입니다.
    • 배열 정렬은 지원되지 않으므로 정렬 키는 expression과 같을 수 없습니다.
    • NULL: ORDER BY 절의 컨텍스트에서 NULL은 최소 가능 값입니다. 즉, ASC 정렬에서는 NULL이 가장 먼저 나타나고 DESC 정렬에서는 마지막으로 나타납니다.
    • 부동 소수점 데이터 유형: 정렬 및 그룹화는 부동 소수점 시맨틱스를 참조하세요.
    • ORDER BY를 지정하지 않으면 출력 배열 내 요소 순서가 확정되지 않습니다. 즉, 이 함수를 사용할 때마다 다른 결과가 나올 수 있습니다.
  2. LIMIT: 결과에서 expression 입력의 최대 개수를 지정합니다. 한도는 배열의 요소 수가 아닌 입력 배열의 수에 적용됩니다. 비어 있는 배열은 1로 계산됩니다. NULL 배열은 계산되지 않습니다. 한도 n은 상수 INT64여야 합니다.

반환되는 데이터 유형

ARRAY

0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다.

예시

SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x)) AS array_concat_agg FROM (
  SELECT [NULL, 1, 2, 3, 4] AS x
  UNION ALL SELECT NULL
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

+-----------------------------------+
| array_concat_agg                  |
+-----------------------------------+
| [NULL, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
+-----------------------------------+
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x))) AS array_concat_agg FROM (
  SELECT [1, 2, 3, 4] AS x
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

+-----------------------------------+
| array_concat_agg                  |
+-----------------------------------+
| [5, 6, 7, 8, 9, 1, 2, 3, 4]       |
+-----------------------------------+
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x LIMIT 2)) AS array_concat_agg FROM (
  SELECT [1, 2, 3, 4] AS x
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

+--------------------------+
| array_concat_agg         |
+--------------------------+
| [1, 2, 3, 4, 5, 6]       |
+--------------------------+
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x) LIMIT 2)) AS array_concat_agg FROM (
  SELECT [1, 2, 3, 4] AS x
  UNION ALL SELECT [5, 6]
  UNION ALL SELECT [7, 8, 9]
);

+------------------+
| array_concat_agg |
+------------------+
| [5, 6, 7, 8, 9]  |
+------------------+

AVG

AVG(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

NULL 이외 입력 값들의 평균을 반환하거나, 입력에 NaN이 포함되어 있는 경우 NaN을 반환합니다.

지원되는 인수 유형

INT64 등 모든 숫자 입력 유형. 부동 소수점 입력 유형의 경우 반환 결과가 확정값이 아닙니다. 즉, 이 함수를 사용할 때마다 다른 결과를 얻을 수 있다는 의미입니다.

옵션 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 AVG() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환되는 데이터 유형

입력INT64NUMERICBIGNUMERICFLOAT64
출력FLOAT64NUMERICBIGNUMERICFLOAT64

예시

SELECT AVG(x) as avg
FROM UNNEST([0, 2, 4, 4, 5]) as x;

+-----+
| avg |
+-----+
| 3   |
+-----+
SELECT AVG(DISTINCT x) AS avg
FROM UNNEST([0, 2, 4, 4, 5]) AS x;

+------+
| avg  |
+------+
| 2.75 |
+------+
SELECT
  x,
  AVG(x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS avg
FROM UNNEST([0, 2, NULL, 4, 4, 5]) AS x;

+------+------+
| x    | avg  |
+------+------+
| NULL | NULL |
| 0    | 0    |
| 2    | 1    |
| 4    | 3    |
| 4    | 4    |
| 5    | 4.5  |
+------+------+

BIT_AND

BIT_AND(
  expression
)

설명

expression에 대해 비트 AND 연산을 수행하여 그 결과를 반환합니다.

지원되는 인수 유형

  • INT64

반환되는 데이터 유형

INT64

예시

SELECT BIT_AND(x) as bit_and FROM UNNEST([0xF001, 0x00A1]) as x;

+---------+
| bit_and |
+---------+
| 1       |
+---------+

BIT_OR

BIT_OR(
  expression
)

설명

expression에 대해 비트 OR 연산을 수행하여 그 결과를 반환합니다.

지원되는 인수 유형

  • INT64

반환되는 데이터 유형

INT64

예시

SELECT BIT_OR(x) as bit_or FROM UNNEST([0xF001, 0x00A1]) as x;

+--------+
| bit_or |
+--------+
| 61601  |
+--------+

BIT_XOR

BIT_XOR(
  [DISTINCT]
  expression
)

설명

expression에 대해 비트 XOR 연산을 수행하여 그 결과를 반환합니다.

지원되는 인수 유형

  • INT64

선택적 절

DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환되는 데이터 유형

INT64

예시

SELECT BIT_XOR(x) AS bit_xor FROM UNNEST([5678, 1234]) AS x;

+---------+
| bit_xor |
+---------+
| 4860    |
+---------+
SELECT BIT_XOR(x) AS bit_xor FROM UNNEST([1234, 5678, 1234]) AS x;

+---------+
| bit_xor |
+---------+
| 5678    |
+---------+
SELECT BIT_XOR(DISTINCT x) AS bit_xor FROM UNNEST([1234, 5678, 1234]) AS x;

+---------+
| bit_xor |
+---------+
| 4860    |
+---------+

COUNT

1.

COUNT(*)  [OVER (...)]

2.

COUNT(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

  1. 입력에 있는 행의 수를 반환합니다.
  2. NULL 이외의 값으로 평가된 expression이 있는 행의 수를 반환합니다.

이 함수는 DISTINCT와 함께 사용될 경우 대조 지정을 지원합니다.

지원되는 인수 유형

expression에는 모든 데이터 유형이 지원됩니다. DISTINCT가 있는 경우 expression그룹화가 가능한 데이터 유형만 지원됩니다.

옵션 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환 데이터 유형

INT64

예시

COUNT 함수를 사용하여 테이블의 행 수 또는 표현식의 고유 값 수를 반환할 수 있습니다. 예를 들면 다음과 같습니다.

SELECT
  COUNT(*) AS count_star,
  COUNT(DISTINCT x) AS count_dist_x
FROM UNNEST([1, 4, 4, 5]) AS x;

+------------+--------------+
| count_star | count_dist_x |
+------------+--------------+
| 4          | 3            |
+------------+--------------+
SELECT
  x,
  COUNT(*) OVER (PARTITION BY MOD(x, 3)) AS count_star,
  COUNT(DISTINCT x) OVER (PARTITION BY MOD(x, 3)) AS count_dist_x
FROM UNNEST([1, 4, 4, 5]) AS x;

+------+------------+--------------+
| x    | count_star | count_dist_x |
+------+------------+--------------+
| 1    | 3          | 2            |
| 4    | 3          | 2            |
| 4    | 3          | 2            |
| 5    | 1          | 1            |
+------+------------+--------------+
SELECT
  x,
  COUNT(*) OVER (PARTITION BY MOD(x, 3)) AS count_star,
  COUNT(x) OVER (PARTITION BY MOD(x, 3)) AS count_x
FROM UNNEST([1, 4, NULL, 4, 5]) AS x;

+------+------------+---------+
| x    | count_star | count_x |
+------+------------+---------+
| NULL | 1          | 0       |
| 1    | 3          | 3       |
| 4    | 3          | 3       |
| 4    | 3          | 3       |
| 5    | 1          | 1       |
+------+------------+---------+

특정 조건이 충족되는 표현식의 고유 값 수를 계산하려면 다음과 같은 레시피를 사용하면 됩니다.

COUNT(DISTINCT IF(condition, expression, NULL))

여기서 IFconditionTRUE이면 expression 값을 반환하고 그렇지 않으면 NULL 값을 반환합니다. 주변 COUNT(DISTINCT ...)NULL 값을 무시하므로 conditionTRUEexpression의 고유 값만 계산합니다.

예를 들어 x의 고유한 양수 값 수를 계산하려면 다음을 사용합니다.

SELECT COUNT(DISTINCT IF(x > 0, x, NULL)) AS distinct_positive
FROM UNNEST([1, -2, 4, 1, -5, 4, 1, 3, -6, 1]) AS x;

+-------------------+
| distinct_positive |
+-------------------+
| 3                 |
+-------------------+

또는 특정 종류의 이벤트가 발생한 고유 날짜 수를 계산하려면 다음을 사용합니다.

WITH Events AS (
  SELECT DATE '2021-01-01' AS event_date, 'SUCCESS' AS event_type
  UNION ALL
  SELECT DATE '2021-01-02' AS event_date, 'SUCCESS' AS event_type
  UNION ALL
  SELECT DATE '2021-01-02' AS event_date, 'FAILURE' AS event_type
  UNION ALL
  SELECT DATE '2021-01-03' AS event_date, 'SUCCESS' AS event_type
  UNION ALL
  SELECT DATE '2021-01-04' AS event_date, 'FAILURE' AS event_type
  UNION ALL
  SELECT DATE '2021-01-04' AS event_date, 'FAILURE' AS event_type
)
SELECT
  COUNT(DISTINCT IF(event_type = 'FAILURE', event_date, NULL))
    AS distinct_dates_with_failures
FROM Events;

+------------------------------+
| distinct_dates_with_failures |
+------------------------------+
| 2                            |
+------------------------------+

COUNTIF

COUNTIF(
  expression
)
[OVER (...)]

설명

expressionTRUE 값 개수를 반환합니다. 입력 행이 없거나 expression이 모든 행에 대해 FALSE 또는 NULL로 평가하는 경우 0을 반환합니다.

expressionBOOL이어야 하므로 COUNTIF(DISTINCT ...) 형식은 지원되지 않습니다. TRUE 고유 값만 있으므로 유용하지 않습니다. 일반적으로 COUNTIFDISTINCT를 결합할 때 특정 조건이 충족되는 표현식의 고유 값 수를 계산하려고 합니다. 이를 위한 한 가지 레시피는 다음과 같습니다.

COUNT(DISTINCT IF(condition, expression, NULL))

여기서는 COUNTIF가 아닌 COUNT를 사용하며 IF 부분을 내부로 옮겼습니다. 자세한 내용은 COUNT의 예시를 참조하세요.

지원되는 인수 유형

BOOL

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환 데이터 유형

INT64

예시

SELECT COUNTIF(x<0) AS num_negative, COUNTIF(x>0) AS num_positive
FROM UNNEST([5, -2, 3, 6, -10, -7, 4, 0]) AS x;

+--------------+--------------+
| num_negative | num_positive |
+--------------+--------------+
| 3            | 4            |
+--------------+--------------+
SELECT
  x,
  COUNTIF(x<0) OVER (ORDER BY ABS(x) ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS num_negative
FROM UNNEST([5, -2, 3, 6, -10, NULL, -7, 4, 0]) AS x;

+------+--------------+
| x    | num_negative |
+------+--------------+
| NULL | 0            |
| 0    | 1            |
| -2   | 1            |
| 3    | 1            |
| 4    | 0            |
| 5    | 0            |
| 6    | 1            |
| -7   | 2            |
| -10  | 2            |
+------+--------------+

LOGICAL_AND

LOGICAL_AND(
  expression
)

설명

NULL이 아닌 모든 표현식의 논리적 AND를 반환합니다. 0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다.

지원되는 인수 유형

BOOL

반환 데이터 유형

BOOL

예시

SELECT LOGICAL_AND(x) AS logical_and FROM UNNEST([true, false, true]) AS x;

+-------------+
| logical_and |
+-------------+
| false       |
+-------------+

LOGICAL_OR

LOGICAL_OR(
  expression
)

설명

NULL이 아닌 모든 표현식의 논리적 OR을 반환합니다. 0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다.

지원되는 인수 유형

BOOL

반환 데이터 유형

BOOL

예시

SELECT LOGICAL_OR(x) AS logical_or FROM UNNEST([true, false, true]) AS x;

+------------+
| logical_or |
+------------+
| true       |
+------------+

MAX

MAX(
  expression
)
[OVER (...)]

설명

NULL이 아닌 표현식의 최댓값을 반환합니다. 0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다. 입력에 NaN이 포함된 경우 NaN을 반환합니다.

이 함수는 대조 지정을 지원합니다.

지원되는 인수 유형

모든 정렬 가능한 데이터 유형

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환 데이터 유형

입력값으로 사용된 데이터 유형과 동일합니다.

예시

SELECT MAX(x) AS max
FROM UNNEST([8, 37, 4, 55]) AS x;

+-----+
| max |
+-----+
| 55  |
+-----+
SELECT x, MAX(x) OVER (PARTITION BY MOD(x, 2)) AS max
FROM UNNEST([8, NULL, 37, 4, NULL, 55]) AS x;

+------+------+
| x    | max  |
+------+------+
| NULL | NULL |
| NULL | NULL |
| 8    | 8    |
| 4    | 8    |
| 37   | 55   |
| 55   | 55   |
+------+------+

MIN

MIN(
  expression
)
[OVER (...)]

설명

NULL이 아닌 표현식의 최솟값을 반환합니다. 0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다. 입력에 NaN이 포함된 경우 NaN을 반환합니다.

이 함수는 대조 지정을 지원합니다.

지원되는 인수 유형

모든 정렬 가능한 데이터 유형

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환 데이터 유형

입력값으로 사용된 데이터 유형과 동일합니다.

예시

SELECT MIN(x) AS min
FROM UNNEST([8, 37, 4, 55]) AS x;

+-----+
| min |
+-----+
| 4   |
+-----+
SELECT x, MIN(x) OVER (PARTITION BY MOD(x, 2)) AS min
FROM UNNEST([8, NULL, 37, 4, NULL, 55]) AS x;

+------+------+
| x    | min  |
+------+------+
| NULL | NULL |
| NULL | NULL |
| 8    | 4    |
| 4    | 4    |
| 37   | 37   |
| 55   | 37   |
+------+------+

STRING_AGG

STRING_AGG(
  [DISTINCT]
  expression [, delimiter]
  [ORDER BY key [{ASC|DESC}] [, ... ]]
  [LIMIT n]
)
[OVER (...)]

설명

null이 아닌 값을 연결하여 얻은 값(STRING 또는 BYTES)을 반환합니다. 0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다.

delimiter가 지정된 경우 연결된 값이 해당 구분 기호로 구분되고, 그렇지 않은 경우 쉼표가 구분 기호로 사용됩니다.

지원되는 인수 유형

STRING BYTES

옵션 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 STRING_AGG() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.
  3. ORDER BY: 값의 순서를 지정합니다.
    • 각 정렬 키의 기본 정렬 방향은 ASC입니다.
    • NULL: ORDER BY 절의 컨텍스트에서 NULL은 최소 가능 값입니다. 즉, ASC 정렬에서는 NULL이 가장 먼저 나타나고 DESC 정렬에서는 마지막으로 나타납니다.
    • 부동 소수점 데이터 유형: 정렬 및 그룹화는 부동 소수점 시맨틱스를 참조하세요.
    • DISTINCT도 지정할 경우 정렬 키는 expression과 동일해야 합니다.
    • ORDER BY를 지정하지 않으면 출력 배열 내 요소 순서가 확정되지 않습니다. 즉, 이 함수를 사용할 때마다 다른 결과가 나올 수 있습니다.
  4. LIMIT: 결과에서 expression 입력의 최대 개수를 지정합니다. 한도는 입력의 문자 수 또는 바이트 수가 아닌 입력 문자열의 수에 적용됩니다. 비어 있는 문자열은 1로 계산됩니다. NULL 문자열은 계산되지 않습니다. 한도 n은 상수 INT64여야 합니다.

반환 데이터 유형

STRING BYTES

예시

SELECT STRING_AGG(fruit) AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;

+------------------------+
| string_agg             |
+------------------------+
| apple,pear,banana,pear |
+------------------------+
SELECT STRING_AGG(fruit, " & ") AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;

+------------------------------+
| string_agg                   |
+------------------------------+
| apple & pear & banana & pear |
+------------------------------+
SELECT STRING_AGG(DISTINCT fruit, " & ") AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;

+-----------------------+
| string_agg            |
+-----------------------+
| apple & pear & banana |
+-----------------------+
SELECT STRING_AGG(fruit, " & " ORDER BY LENGTH(fruit)) AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;

+------------------------------+
| string_agg                   |
+------------------------------+
| pear & pear & apple & banana |
+------------------------------+
SELECT STRING_AGG(fruit, " & " LIMIT 2) AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;

+--------------+
| string_agg   |
+--------------+
| apple & pear |
+--------------+
SELECT STRING_AGG(DISTINCT fruit, " & " ORDER BY fruit DESC LIMIT 2) AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;

+---------------+
| string_agg    |
+---------------+
| pear & banana |
+---------------+
SELECT
  fruit,
  STRING_AGG(fruit, " & ") OVER (ORDER BY LENGTH(fruit)) AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;

+--------+------------------------------+
| fruit  | string_agg                   |
+--------+------------------------------+
| NULL   | NULL                         |
| pear   | pear & pear                  |
| pear   | pear & pear                  |
| apple  | pear & pear & apple          |
| banana | pear & pear & apple & banana |
+--------+------------------------------+

SUM

SUM(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

null이 아닌 값의 합계를 반환합니다.

표현식이 부동 소수점 값인 경우, 합계가 확정값이 아닙니다. 즉, 이 함수를 사용할 때마다 다른 결과를 얻을 수 있다는 뜻입니다.

지원되는 인수 유형

지원되는 모든 숫자 데이터 유형 및 INTERVAL입니다.

선택적 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환 데이터 유형

입력INT64NUMERICBIGNUMERICFLOAT64INTERVAL
OUTPUTINT64NUMERICBIGNUMERICFLOAT64INTERVAL

특수한 경우:

입력에 NULL만 포함된 경우 NULL을 반환합니다.

입력에 행이 없으면 NULL을 반환합니다.

입력에 Inf가 포함된 경우 Inf를 반환합니다.

입력에 -Inf가 포함된 경우 -Inf를 반환합니다.

입력에 NaN이 포함된 경우 NaN을 반환합니다.

입력에 Inf-Inf의 조합이 포함된 경우 NaN을 반환합니다.

예시

SELECT SUM(x) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;

+-----+
| sum |
+-----+
| 25  |
+-----+
SELECT SUM(DISTINCT x) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;

+-----+
| sum |
+-----+
| 15  |
+-----+
SELECT
  x,
  SUM(x) OVER (PARTITION BY MOD(x, 3)) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;

+---+-----+
| x | sum |
+---+-----+
| 3 | 6   |
| 3 | 6   |
| 1 | 10  |
| 4 | 10  |
| 4 | 10  |
| 1 | 10  |
| 2 | 9   |
| 5 | 9   |
| 2 | 9   |
+---+-----+
SELECT
  x,
  SUM(DISTINCT x) OVER (PARTITION BY MOD(x, 3)) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;

+---+-----+
| x | sum |
+---+-----+
| 3 | 3   |
| 3 | 3   |
| 1 | 5   |
| 4 | 5   |
| 4 | 5   |
| 1 | 5   |
| 2 | 7   |
| 5 | 7   |
| 2 | 7   |
+---+-----+
SELECT SUM(x) AS sum
FROM UNNEST([]) AS x;

+------+
| sum  |
+------+
| NULL |
+------+

통계 집계 함수

BigQuery는 다음 통계 집계 함수를 지원합니다.

CORR

CORR(
  X1, X2
)
[OVER (...)]

설명

번호 쌍 집합의 피어슨 상관 계수를 반환합니다. 각 번호 쌍의 첫 번째 번호는 종속 변수이고 두 번째 번호는 독립 변수입니다. 반환 결과는 -1~1 사이입니다. 결과가 0이면 상관관계가 없다는 의미입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 하나 이상의 NULL 값이 포함된 입력 쌍을 무시합니다. NULL 값이 없는 입력 쌍이 2개 미만일 경우 이 함수는 NULL을 반환합니다.

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환 데이터 유형

FLOAT64

COVAR_POP

COVAR_POP(
  X1, X2
)
[OVER (...)]

설명

번호 쌍 집합의 모집단 공분산을 반환합니다. 첫 번째 번호는 종속 변수이고 두 번째 번호는 독립 변수입니다. 반환 결과는 -Inf~+Inf 사이입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 하나 이상의 NULL 값이 포함된 입력 쌍을 무시합니다. NULL 값이 없는 입력 쌍이 없는 경우, 이 함수는 NULL을 반환합니다. NULL 값이 없는 입력 쌍이 정확히 1개 있는 경우, 이 함수는 0을 반환합니다.

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환 데이터 유형

FLOAT64

COVAR_SAMP

COVAR_SAMP(
  X1, X2
)
[OVER (...)]

설명

번호 쌍 집합의 샘플 공분산을 반환합니다. 첫 번째 번호는 종속 변수이고 두 번째 번호는 독립 변수입니다. 반환 결과는 -Inf~+Inf 사이입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 하나 이상의 NULL 값이 포함된 입력 쌍을 무시합니다. NULL 값이 없는 입력 쌍이 2개 미만일 경우 이 함수는 NULL을 반환합니다.

선택적 절

OVER: 기간을 지정합니다. 분석 함수를 참조하세요.

반환 데이터 유형

FLOAT64

STDDEV_POP

STDDEV_POP(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

값의 모집단(편향) 표준 편차를 반환합니다. 반환 결과는 0~+Inf 사이입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 모든 NULL 입력을 무시합니다. 모든 입력이 무시되면 이 함수는 NULL을 반환합니다.

이 함수는 NULL이 아닌 단일 입력을 받으면 0을 반환합니다.

선택적 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 STDDEV_POP() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환 데이터 유형

FLOAT64

STDDEV_SAMP

STDDEV_SAMP(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

값의 샘플(비편향) 표준 편차를 반환합니다. 반환 결과는 0~+Inf 사이입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 모든 NULL 입력을 무시합니다. NULL이 아닌 입력이 2개 미만인 경우, 이 함수는 NULL을 반환합니다.

선택적 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 STDDEV_SAMP() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환 데이터 유형

FLOAT64

STDDEV

STDDEV(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

STDDEV_SAMP의 별칭입니다.

VAR_POP

VAR_POP(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

값의 모집단(편향) 분산을 반환합니다. 반환 결과는 0~+Inf 사이입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 모든 NULL 입력을 무시합니다. 모든 입력이 무시되면 이 함수는 NULL을 반환합니다.

이 함수는 NULL이 아닌 단일 입력을 받으면 0을 반환합니다.

선택적 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 VAR_POP() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환 데이터 유형

FLOAT64

VAR_SAMP

VAR_SAMP(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

값의 샘플(비편향) 분산을 반환합니다. 반환 결과는 0~+Inf 사이입니다.

모든 숫자 유형이 지원됩니다. 입력이 NUMERIC 또는 BIGNUMERIC이면 최종 출력이 FLOAT64로 변환되어 내부 집계가 안정적입니다. 그렇지 않으면 입력이 집계 전에 FLOAT64로 변환되어 결과가 불안정할 수 있습니다.

이 함수는 모든 NULL 입력을 무시합니다. NULL이 아닌 입력이 2개 미만인 경우, 이 함수는 NULL을 반환합니다.

선택적 절

절은 다음 순서로 적용됩니다.

  1. OVER: 기간을 지정합니다. 분석 함수를 참조하세요. 이 절은 현재 VAR_SAMP() 내의 다른 모든 절과 호환되지 않습니다.
  2. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.

반환 데이터 유형

FLOAT64

VARIANCE

VARIANCE(
  [DISTINCT]
  expression
)
[OVER (...)]

설명

VAR_SAMP의 별칭입니다.

근사치 집계 함수

근사치 집계 함수는 메모리 사용량과 시간 면에서 확장 가능하지만 정확한 결과가 아닌 근사치 결과를 산출합니다. 이러한 함수는 일반적으로 COUNT(DISTINCT ...)와 같은 정확한 집계 함수보다 적은 메모리를 사용하지만 통계상의 불확실성 또한 존재합니다. 따라서 근사치 집계는 선형 메모리 사용량이 비효율적이거나 데이터가 이미 근사치인 대용량 데이터 스트림에 적합합니다

이 섹션의 근사치 집계 함수는 데이터의 중간 추정이 아닌 입력 데이터로 직접 작동합니다. 이러한 함수에서는 스케치로 추정 정밀도를 지정할 수 없습니다. 스케치로 정밀도를 지정하려면 다음을 참조하세요.

APPROX_COUNT_DISTINCT

APPROX_COUNT_DISTINCT(
  expression
)

설명

COUNT(DISTINCT expression)의 대략적인 결과를 반환합니다. 반환되는 값은 통계적 추정치이며 실제 값과 다를 수 있습니다.

이 함수는 COUNT(DISTINCT expression)보다 정확성이 떨어지지만 대량의 데이터를 입력할 때 성능 면에서 유리합니다.

지원되는 인수 유형

다음을 제외한 모든 데이터 유형: ARRAY STRUCT

반환되는 데이터 유형

INT64

예시

SELECT APPROX_COUNT_DISTINCT(x) as approx_distinct
FROM UNNEST([0, 1, 1, 2, 3, 5]) as x;

+-----------------+
| approx_distinct |
+-----------------+
| 5               |
+-----------------+

APPROX_QUANTILES

APPROX_QUANTILES(
  [DISTINCT]
  expression, number
  [{IGNORE|RESPECT} NULLS]
)

설명

expression 값 그룹의 근사치 경계를 반환합니다. 여기서 number는 생성할 분위 수를 나타냅니다. 이 함수는 number + 1 요소 배열을 반환합니다. 여기서 첫 번째 요소는 근사치의 최솟값이며 마지막 요소는 근사치의 최댓값입니다.

지원되는 인수 유형

expression은 다음을 제외한 지원되는 모든 데이터 유형일 수 있습니다. ARRAY STRUCT

number는 INT64여야 합니다.

선택적 절

절은 다음 순서로 적용됩니다.

  1. DISTINCT: 각각의 고유한 expression 값이 한 번만 결과에 집계됩니다.
  2. IGNORE NULLS 또는 RESPECT NULLS: IGNORE NULLS가 지정되면 NULL 값이 결과에서 제외됩니다. RESPECT NULLS가 지정되면 결과에 NULL 값이 포함됩니다. 아무것도 지정되지 않으면 NULL 값이 결과에서 제외됩니다. 최종 쿼리 결과의 배열에 NULL 요소가 포함되어 있으면 오류가 발생합니다.

반환되는 데이터 유형

expression 매개변수에 의해 지정된 유형의 ARRAY입니다.

0이 입력된 행이 있거나 expression이 모든 행에서 NULL로 평가되는 경우 NULL을 반환합니다.

예시

SELECT APPROX_QUANTILES(x, 2) AS approx_quantiles
FROM UNNEST([1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [1, 5, 10]       |
+------------------+
SELECT APPROX_QUANTILES(x, 100)[OFFSET(90)] AS percentile_90
FROM UNNEST([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) AS x;

+---------------+
| percentile_90 |
+---------------+
| 9             |
+---------------+
SELECT APPROX_QUANTILES(DISTINCT x, 2) AS approx_quantiles
FROM UNNEST([1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [1, 6, 10]       |
+------------------+
SELECT FORMAT("%T", APPROX_QUANTILES(x, 2 RESPECT NULLS)) AS approx_quantiles
FROM UNNEST([NULL, NULL, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [NULL, 4, 10]    |
+------------------+
SELECT FORMAT("%T", APPROX_QUANTILES(DISTINCT x, 2 RESPECT NULLS)) AS approx_quantiles
FROM UNNEST([NULL, NULL, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10]) AS x;

+------------------+
| approx_quantiles |
+------------------+
| [NULL, 6, 10]    |
+------------------+

APPROX_TOP_COUNT

APPROX_TOP_COUNT(
  expression, number
)

설명

expression의 근사치 최상위 요소를 반환합니다. number 매개변수는 반환되는 요소의 수를 지정합니다.

지원되는 인수 유형

expressionGROUP BY 절이 지원하는 모든 데이터 유형이 될 수 있습니다.

number는 INT64여야 합니다.

반환되는 데이터 유형

유형 STRUCT의 ARRAY입니다. STRUCT에는 두 개의 필드가 있습니다. 첫 번째 필드(value)에는 입력 값이 포함됩니다. 두 번째 필드(count)에는 값이 반환된 횟수를 나타내는 INT64가 포함됩니다.

0이 입력된 행이 있으면 NULL을 반환합니다.

예시

SELECT APPROX_TOP_COUNT(x, 2) as approx_top_count
FROM UNNEST(["apple", "apple", "pear", "pear", "pear", "banana"]) as x;

+-------------------------+
| approx_top_count        |
+-------------------------+
| [{pear, 3}, {apple, 2}] |
+-------------------------+

NULL 처리

APPROX_TOP_COUNT는 입력에서 NULL을 무시하지 않습니다. 예를 들면 다음과 같습니다.

SELECT APPROX_TOP_COUNT(x, 2) as approx_top_count
FROM UNNEST([NULL, "pear", "pear", "pear", "apple", NULL]) as x;

+------------------------+
| approx_top_count       |
+------------------------+
| [{pear, 3}, {NULL, 2}] |
+------------------------+

APPROX_TOP_SUM

APPROX_TOP_SUM(
  expression, weight, number
)

설명

할당된 weight의 합계를 바탕으로 expression의 근사치 최상위 요소를 반환합니다. number 매개변수는 반환되는 요소의 수를 지정합니다.

weight 입력이 음수이거나 NaN이면 이 함수는 오류를 반환합니다.

지원되는 인수 유형

expressionGROUP BY 절이 지원하는 모든 데이터 유형이 될 수 있습니다.

weight는 다음 중 하나여야 합니다.

  • INT64
  • NUMERIC
  • BIGNUMERIC
  • FLOAT64

number는 INT64여야 합니다.

반환되는 데이터 유형

유형 STRUCT의 ARRAY입니다. STRUCT에는 valuesum이라는 2개의 필드가 포함됩니다. value 필드에는 입력 표현식의 값이 포함됩니다. sum 필드는 weight와 같은 유형으로, value 필드에 연결된 입력 가중치의 근사치 합계입니다.

0이 입력된 행이 있으면 NULL을 반환합니다.

예시

SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([
  STRUCT("apple" AS x, 3 AS weight),
  ("pear", 2),
  ("apple", 0),
  ("banana", 5),
  ("pear", 4)
]);

+--------------------------+
| approx_top_sum           |
+--------------------------+
| [{pear, 6}, {banana, 5}] |
+--------------------------+

NULL 처리

APPROX_TOP_SUM은 expressionweight 매개변수의 NULL 값을 무시하지 않습니다.

SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([STRUCT("apple" AS x, NULL AS weight), ("pear", 0), ("pear", NULL)]);

+----------------------------+
| approx_top_sum             |
+----------------------------+
| [{pear, 0}, {apple, NULL}] |
+----------------------------+
SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([STRUCT("apple" AS x, 0 AS weight), (NULL, 2)]);

+-------------------------+
| approx_top_sum          |
+-------------------------+
| [{NULL, 2}, {apple, 0}] |
+-------------------------+
SELECT APPROX_TOP_SUM(x, weight, 2) AS approx_top_sum FROM
UNNEST([STRUCT("apple" AS x, 0 AS weight), (NULL, NULL)]);

+----------------------------+
| approx_top_sum             |
+----------------------------+
| [{apple, 0}, {NULL, NULL}] |
+----------------------------+

HyperLogLog++ 함수

HyperLogLog++ 알고리즘(HLL++)스케치를 기준으로 카디널리티를 추정합니다. 스케치 작업을 사용하지 않고 맞춤설정한 정밀도가 필요하지 않은 경우 시스템 정의 정밀도가 적용된 근사치 집계 함수를 사용해 보세요.

HLL++ 함수는 근사치 집계 함수입니다. 근사치 집계는 일반적으로 COUNT(DISTINCT)와 같은 정확한 집계 함수보다 적은 메모리를 사용하지만 통계상의 불확실성 또한 존재합니다. 따라서 HLL++ 함수는 선형 메모리 사용이 비효율적인 대규모 데이터 스트림 및 이미 근사치인 데이터에 적합합니다.

BigQuery는 다음과 같은 HLL++ 함수를 지원합니다.

HLL_COUNT.INIT

HLL_COUNT.INIT(input [, precision])

설명

input 값을 한 개 이상 취해 HLL++ 스케치로 집계하는 집계 함수입니다. 각 스케치는 BYTES 데이터 유형을 사용하여 나타납니다. HLL_COUNT.MERGE 또는 HLL_COUNT.MERGE_PARTIAL을 사용하여 스케치를 병합할 수 있습니다. 병합이 필요하지 않다면 HLL_COUNT.EXTRACT를 사용하여 스케치에서 고유 값의 최종 개수를 추출할 수 있습니다.

이 함수는 선택적 매개변수인 precision을 지원합니다. 이 매개변수는 추정의 정확성을 정의하지만 그 대신 스케치를 처리하거나 디스크에 저장하려면 메모리가 추가로 필요합니다. 아래 표는 허용되는 정밀도 값, 그룹당 최대 스케치 크기, 일반적 정밀도의 신뢰 구간(CI)을 보여 줍니다.

정밀도 최대 스케치 크기(KiB) 65% CI 95% CI 99% CI
10 1 ±3.25% ±6.50% ±9.75%
11 2 ±2.30% ±4.60% ±6.89%
12 4 ±1.63% ±3.25% ±4.88%
13 8 ±1.15% ±2.30% ±3.45%
14 16 ±0.81% ±1.63% ±2.44%
15(기본값) 32 ±0.57% ±1.15% ±1.72%
16 64 ±0.41% ±0.81% ±1.22%
17 128 ±0.29% ±0.57% ±0.86%
18 256 ±0.20% ±0.41% ±0.61%
19 512 ±0.14% ±0.29% ±0.43%
20 1024 ±0.10% ±0.20% ±0.30%
21 2048 ±0.07% ±0.14% ±0.22%
22 4096 ±0.05% ±0.10% ±0.15%
23 8192 ±0.04% ±0.07% ±0.11%
24 16384 ±0.03% ±0.05% ±0.08%

입력이 NULL이면 이 함수는 NULL을 반환합니다.

자세한 내용은 HyperLogLog 실무: 첨단 카디널리티 추정 알고리즘의 알고리즘 엔지니어링을 참조하세요.

지원되는 입력 유형

  • INT64
  • NUMERIC
  • BIGNUMERIC
  • STRING
  • BYTES

반환 유형

BYTES

예시

SELECT
  HLL_COUNT.INIT(respondent) AS respondents_hll,
  flavor,
  country
FROM UNNEST([
  STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
  (1, "Chocolate", "CH"),
  (2, "Chocolate", "US"),
  (2, "Strawberry", "US")])
GROUP BY flavor, country;

HLL_COUNT.MERGE

HLL_COUNT.MERGE(sketch)

설명

여러 HLL++ 세트 스케치의 공용 구조체를 계산하여 해당 카디널리티를 반환하는 집계 함수입니다.

sketch는 동일한 유형에서 초기화되어야 합니다. 다른 유형의 스케치를 병합하려고 하면 오류가 발생합니다. 예를 들어 INT64 데이터에서 초기화된 스케치는 STRING 데이터에서 초기화된 스케치와 병합할 수 없습니다.

병합된 스케치가 서로 다른 정밀도로 초기화되면 정밀도는 병합과 관련된 가장 낮은 정밀도로 다운그레이드됩니다.

이 함수는 스케치를 병합할 때 NULL 값을 무시합니다. 0개의 행에서 또는 NULL 값에서만 병합이 이루어지는 경우, 함수는 0을 반환합니다.

지원되는 입력 유형

BYTES

반환 유형

INT64

예시

SELECT HLL_COUNT.MERGE(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.MERGE_PARTIAL

HLL_COUNT.MERGE_PARTIAL(sketch)

설명

HLL++ sketch 입력을 한 개 이상 취해 새로운 스케치로 병합하는 집계 함수입니다.

sketch는 동일한 유형에서 초기화되어야 합니다. 다른 유형의 스케치를 병합하려고 하면 오류가 발생합니다. 예를 들어 INT64 데이터에서 초기화된 스케치는 STRING 데이터에서 초기화된 스케치와 병합할 수 없습니다.

병합된 스케치가 서로 다른 정밀도로 초기화되면 정밀도는 병합과 관련된 가장 낮은 정밀도로 다운그레이드됩니다. 예를 들어 MERGE_PARTIAL이 정밀도 14와 15의 스케치를 발견하는 경우 반환되는 새 스케치는 정밀도가 14입니다.

이 함수는 입력이 없거나 모든 입력이 NULL이면 NULL을 반환합니다.

지원되는 입력 유형

BYTES

반환 유형

BYTES

예시

SELECT HLL_COUNT.MERGE_PARTIAL(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.EXTRACT

HLL_COUNT.EXTRACT(sketch)

설명

단일 HLL++ 스케치의 카디널리티 추정치를 추출하는 스칼라 함수입니다.

sketchNULL이면 이 함수는 0 카디널리티 추정치를 반환합니다.

지원되는 입력 유형

BYTES

반환 유형

INT64

예시

SELECT
  flavor,
  country,
  HLL_COUNT.EXTRACT(respondents_hll) AS num_respondents
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country);

+------------+---------+-----------------+
| flavor     | country | num_respondents |
+------------+---------+-----------------+
| Vanilla    | CH      | 1               |
| Chocolate  | CH      | 1               |
| Chocolate  | US      | 1               |
| Strawberry | US      | 1               |
+------------+---------+-----------------+

HLL++ 알고리즘 정보

HLL++ 알고리즘은 매우 작거나 큰 카디널리티를 더 정확히 추정하여 HLL 알고리즘을 개선합니다. HLL++ 알고리즘에는 64비트 해시 함수, 작은 카디널리티 추정치의 메모리 요구사항 완화를 위한 희소 표현, 작은 카디널리티 추정치에 대한 경험적 바이어스 수정이 포함됩니다.

스케치 정보

스케치는 대규모 데이터 스트림의 요약입니다. 스케치에서 통계를 추출하여 원래 데이터의 특정 통계를 추정하거나 스케치를 병합하여 여러 데이터 스트림을 요약할 수 있습니다. 스케치에는 다음 기능이 포함됩니다.

  • 원시 데이터를 고정 메모리 표현으로 압축합니다.
  • 입력보다 점근적으로 더 작습니다.
  • 메모리 내 저선형 데이터 구조의 직렬화된 형식입니다.
  • 일반적으로 만드는 데 사용되는 입력보다 메모리가 적게 필요합니다.

스케치를 사용하여 다른 시스템과 통합할 수 있습니다. 예를 들어 Cloud Dataflow 또는 Apache Spark와 같은 외부 애플리케이션에서 스케치를 빌드하고 BigQuery에서 사용하거나 그 반대로도 할 수 있습니다. 또한 스케치를 사용하여 COUNT(DISTINCT)와 같은 비가산 함수의 중간 집계를 빌드할 수 있습니다.

번호 지정 함수

다음 섹션은 BigQuery가 지원하는 번호 지정 함수를 설명합니다. 번호 지정 함수는 분석 함수의 하위 집합입니다. 분석 함수의 작동 방식에 대한 설명은 분석 함수 개념을 참조하세요. 번호 지정 함수의 작동 방식에 대한 설명과 RANK, DENSE_RANK, ROW_NUMBER를 비교하는 예시는 번호 지정 함수 개념을 참조하세요.

OVER 절 요구사항:

  • PARTITION BY: 선택사항입니다.
  • ORDER BY: ROW_NUMBER()를 제외하고 필수입니다.
  • window_frame_clause: 허용되지 않습니다.

RANK

RANK()

설명

순서가 지정된 파티션 내 각 행의 서수(1부터 시작) 순위를 반환합니다. 모든 피어 행은 동일한 순위 값을 받습니다. 다음 행 또는 피어 행 집합은 항상 1씩 증가하는 DENSE_RANK 대신 이전 순위 값의 피어 수만큼 증가하는 순위 값을 받습니다.

반환 유형

INT64

예시

WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 2:59:01', 'F30-34')
SELECT name,
  finish_time,
  division,
  RANK() OVER (PARTITION BY division ORDER BY finish_time ASC) AS finish_rank
FROM finishers;

+-----------------+------------------------+----------+-------------+
| name            | finish_time            | division | finish_rank |
+-----------------+------------------------+----------+-------------+
| Sophia Liu      | 2016-10-18 09:51:45+00 | F30-34   | 1           |
| Meghan Lederer  | 2016-10-18 09:59:01+00 | F30-34   | 2           |
| Nikki Leith     | 2016-10-18 09:59:01+00 | F30-34   | 2           |
| Jen Edwards     | 2016-10-18 10:06:36+00 | F30-34   | 4           |
| Lisa Stelzner   | 2016-10-18 09:54:11+00 | F35-39   | 1           |
| Lauren Matthews | 2016-10-18 10:01:17+00 | F35-39   | 2           |
| Desiree Berry   | 2016-10-18 10:05:42+00 | F35-39   | 3           |
| Suzy Slane      | 2016-10-18 10:06:24+00 | F35-39   | 4           |
+-----------------+------------------------+----------+-------------+

DENSE_RANK

DENSE_RANK()

설명

윈도우 파티션 내 각 행의 서수(1부터 시작) 순위를 반환합니다. 모든 피어 행은 동일한 순위 값을 받으며, 이후의 순위 값은 1씩 증가합니다.

반환 유형

INT64

예시

WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 2:59:01', 'F30-34')
SELECT name,
  finish_time,
  division,
  DENSE_RANK() OVER (PARTITION BY division ORDER BY finish_time ASC) AS finish_rank
FROM finishers;

+-----------------+------------------------+----------+-------------+
| name            | finish_time            | division | finish_rank |
+-----------------+------------------------+----------+-------------+
| Sophia Liu      | 2016-10-18 09:51:45+00 | F30-34   | 1           |
| Meghan Lederer  | 2016-10-18 09:59:01+00 | F30-34   | 2           |
| Nikki Leith     | 2016-10-18 09:59:01+00 | F30-34   | 2           |
| Jen Edwards     | 2016-10-18 10:06:36+00 | F30-34   | 3           |
| Lisa Stelzner   | 2016-10-18 09:54:11+00 | F35-39   | 1           |
| Lauren Matthews | 2016-10-18 10:01:17+00 | F35-39   | 2           |
| Desiree Berry   | 2016-10-18 10:05:42+00 | F35-39   | 3           |
| Suzy Slane      | 2016-10-18 10:06:24+00 | F35-39   | 4           |
+-----------------+------------------------+----------+-------------+

PERCENT_RANK

PERCENT_RANK()

설명

(RK-1)/(NR-1)로 정의된 행의 백분위수 순위를 반환합니다. 여기서 RK는 행의 RANK이고 NR은 파티션에 있는 행의 수입니다. NR=1이면 0을 반환합니다.

반환 유형

FLOAT64

예시

WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 2:59:01', 'F30-34')
SELECT name,
  finish_time,
  division,
  PERCENT_RANK() OVER (PARTITION BY division ORDER BY finish_time ASC) AS finish_rank
FROM finishers;

+-----------------+------------------------+----------+---------------------+
| name            | finish_time            | division | finish_rank         |
+-----------------+------------------------+----------+---------------------+
| Sophia Liu      | 2016-10-18 09:51:45+00 | F30-34   | 0                   |
| Meghan Lederer  | 2016-10-18 09:59:01+00 | F30-34   | 0.33333333333333331 |
| Nikki Leith     | 2016-10-18 09:59:01+00 | F30-34   | 0.33333333333333331 |
| Jen Edwards     | 2016-10-18 10:06:36+00 | F30-34   | 1                   |
| Lisa Stelzner   | 2016-10-18 09:54:11+00 | F35-39   | 0                   |
| Lauren Matthews | 2016-10-18 10:01:17+00 | F35-39   | 0.33333333333333331 |
| Desiree Berry   | 2016-10-18 10:05:42+00 | F35-39   | 0.66666666666666663 |
| Suzy Slane      | 2016-10-18 10:06:24+00 | F35-39   | 1                   |
+-----------------+------------------------+----------+---------------------+

CUME_DIST

CUME_DIST()

설명

NP/NR로 정의된 행의 상대적 순위를 반환합니다. NP는 현재 행보다 선행하거나 현재 행과 피어인 행의 수로 정의됩니다. NR은 파티션에 있는 행의 수입니다.

반환 유형

FLOAT64

예시

WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 2:59:01', 'F30-34')
SELECT name,
  finish_time,
  division,
  CUME_DIST() OVER (PARTITION BY division ORDER BY finish_time ASC) AS finish_rank
FROM finishers;

+-----------------+------------------------+----------+-------------+
| name            | finish_time            | division | finish_rank |
+-----------------+------------------------+----------+-------------+
| Sophia Liu      | 2016-10-18 09:51:45+00 | F30-34   | 0.25        |
| Meghan Lederer  | 2016-10-18 09:59:01+00 | F30-34   | 0.75        |
| Nikki Leith     | 2016-10-18 09:59:01+00 | F30-34   | 0.75        |
| Jen Edwards     | 2016-10-18 10:06:36+00 | F30-34   | 1           |
| Lisa Stelzner   | 2016-10-18 09:54:11+00 | F35-39   | 0.25        |
| Lauren Matthews | 2016-10-18 10:01:17+00 | F35-39   | 0.5         |
| Desiree Berry   | 2016-10-18 10:05:42+00 | F35-39   | 0.75        |
| Suzy Slane      | 2016-10-18 10:06:24+00 | F35-39   | 1           |
+-----------------+------------------------+----------+-------------+

NTILE

NTILE(constant_integer_expression)

설명

이 함수는 행 순서에 따라 행을 constant_integer_expression 버킷으로 나누고 각 행에 할당된 버킷 번호(1부터 시작)를 반환합니다. 버킷에 있는 행의 번호는 최대 1만큼 다를 수 있습니다. 나머지 값(버킷으로 나눈 행의 나머지 번호)은 버킷 1부터 시작하여 각 버킷에 하나씩 분배됩니다. constant_integer_expression이 NULL, 0 또는 음수로 평가되면 오류가 생성됩니다.

반환 유형

INT64

예시

WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 2:59:01', 'F30-34')
SELECT name,
  finish_time,
  division,
  NTILE(3) OVER (PARTITION BY division ORDER BY finish_time ASC) AS finish_rank
FROM finishers;

+-----------------+------------------------+----------+-------------+
| name            | finish_time            | division | finish_rank |
+-----------------+------------------------+----------+-------------+
| Sophia Liu      | 2016-10-18 09:51:45+00 | F30-34   | 1           |
| Meghan Lederer  | 2016-10-18 09:59:01+00 | F30-34   | 1           |
| Nikki Leith     | 2016-10-18 09:59:01+00 | F30-34   | 2           |
| Jen Edwards     | 2016-10-18 10:06:36+00 | F30-34   | 3           |
| Lisa Stelzner   | 2016-10-18 09:54:11+00 | F35-39   | 1           |
| Lauren Matthews | 2016-10-18 10:01:17+00 | F35-39   | 1           |
| Desiree Berry   | 2016-10-18 10:05:42+00 | F35-39   | 2           |
| Suzy Slane      | 2016-10-18 10:06:24+00 | F35-39   | 3           |
+-----------------+------------------------+----------+-------------+

ROW_NUMBER

ROW_NUMBER()

설명

ORDER BY 절이 필요하지 않습니다. 순서가 지정된 파티션마다 각 행의 순차 행 서수(1부터 시작)를 반환합니다. ORDER BY 절이 지정되지 않으면 결과는 비확정적입니다.

반환 유형

INT64

예시

WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 2:59:01', 'F30-34')
SELECT name,
  finish_time,
  division,
  ROW_NUMBER() OVER (PARTITION BY division ORDER BY finish_time ASC) AS finish_rank
FROM finishers;

+-----------------+------------------------+----------+-------------+
| name            | finish_time            | division | finish_rank |
+-----------------+------------------------+----------+-------------+
| Sophia Liu      | 2016-10-18 09:51:45+00 | F30-34   | 1           |
| Meghan Lederer  | 2016-10-18 09:59:01+00 | F30-34   | 2           |
| Nikki Leith     | 2016-10-18 09:59:01+00 | F30-34   | 3           |
| Jen Edwards     | 2016-10-18 10:06:36+00 | F30-34   | 4           |
| Lisa Stelzner   | 2016-10-18 09:54:11+00 | F35-39   | 1           |
| Lauren Matthews | 2016-10-18 10:01:17+00 | F35-39   | 2           |
| Desiree Berry   | 2016-10-18 10:05:42+00 | F35-39   | 3           |
| Suzy Slane      | 2016-10-18 10:06:24+00 | F35-39   | 4           |
+-----------------+------------------------+----------+-------------+

비트 함수

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

BIT_COUNT

BIT_COUNT(expression)

설명

입력 expression은 정수 또는 BYTES여야 합니다.

입력 expression에 설정된 비트 수를 반환합니다. 부호 있는 정수의 경우, 2의 보수 형식의 비트 수입니다.

반환 데이터 유형

INT64

예시

SELECT a, BIT_COUNT(a) AS a_bits, FORMAT("%T", b) as b, BIT_COUNT(b) AS b_bits
FROM UNNEST([
  STRUCT(0 AS a, b'' AS b), (0, b'\x00'), (5, b'\x05'), (8, b'\x00\x08'),
  (0xFFFF, b'\xFF\xFF'), (-2, b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE'),
  (-1, b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF'),
  (NULL, b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF')
]) AS x;

+-------+--------+---------------------------------------------+--------+
| a     | a_bits | b                                           | b_bits |
+-------+--------+---------------------------------------------+--------+
| 0     | 0      | b""                                         | 0      |
| 0     | 0      | b"\x00"                                     | 0      |
| 5     | 2      | b"\x05"                                     | 2      |
| 8     | 1      | b"\x00\x08"                                 | 1      |
| 65535 | 16     | b"\xff\xff"                                 | 16     |
| -2    | 63     | b"\xff\xff\xff\xff\xff\xff\xff\xfe"         | 63     |
| -1    | 64     | b"\xff\xff\xff\xff\xff\xff\xff\xff"         | 64     |
| NULL  | NULL   | b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" | 80     |
+-------+--------+---------------------------------------------+--------+

변환 함수

BigQuery는 다음 변환 함수를 지원합니다. 이러한 데이터 유형 변환은 명시적이지만 일부 변환은 암시적으로 발생할 수 있습니다. 암시적 및 명시적 변환에 대한 자세한 내용은 여기를 참조하세요.

CAST 개요

CAST(expression AS typename [format_clause])

설명

쿼리에서 사용되는 Cast 구문은 표현식의 결과 유형이 다른 유형으로 변환되어야 함을 나타냅니다.

CAST 사용 시 BigQuery가 변환을 수행할 수 없으면 쿼리가 실패할 수 있습니다. 이러한 유형의 오류로부터 쿼리를 보호하기 위해 SAFE_CAST를 사용할 수 있습니다.

원본 값에서 대상 도메인으로 성공적으로 매핑되지 못하는 지원 유형 간의 변환은 런타임 오류를 유발합니다. 예를 들어 BYTES를 STRING으로 Cast 변환하는데 바이트 시퀀스가 유효한 UTF-8이 아닌 경우에는 런타임 오류가 발생합니다.

일부 Cast에는 Cast 생성 방법에 대한 안내를 제공하는 형식 절이 포함될 수 있습니다. 예를 들어 바이트 시퀀스를 UTF-8 인코딩 문자열 대신 BASE64 인코딩 문자열로 변환하도록 Cast를 안내할 수 있습니다.

형식 절의 구조는 각 Cast 유형에 따라 고유하며 해당 Cast 섹션에 더 많은 정보가 제공됩니다.

예시

다음 쿼리에서는 x1이면 "true"이고, NULL 외의 값이면 "false"이고, xNULL이면 NULL입니다.

CAST(x=1 AS STRING)

ARRAY로 CAST 변환

CAST(expression AS ARRAY<element_type>)

설명

BigQuery는 ARRAY로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • ARRAY

변환 규칙

원본 대상 x Cast 변환 시 규칙
ARRAY ARRAY 정확히 동일한 ARRAY 유형이어야 합니다.

BIGNUMERIC으로 CAST 변환

CAST(expression AS BIGNUMERIC)

설명

BigQuery는 BIGNUMERIC으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • INT64
  • FLOAT64
  • NUMERIC
  • BIGNUMERIC
  • STRING

변환 규칙

원본 대상 x Cast 변환 시 규칙
FLOAT64 BIGNUMERIC 부동 소수점 수는 0에서 멀어지는 방향으로 반올림됩니다. NaN, +inf 또는 -inf Cast 변환 시 오류가 반환됩니다. BIGNUMERIC 범위를 벗어난 값을 Cast 변환하면 오버플로 오류가 반환됩니다.
STRING BIGNUMERIC STRING에 포함된 숫자 리터럴은 BIGNUMERIC 유형의 최대 정밀도 또는 범위를 초과하면 안 됩니다. 초과하면 오류가 발생합니다. 소수점 이하 자릿수가 38자리를 초과하면 결과 BIGNUMERIC 값은 소수점 이하 자릿수가 38자리가 되도록 0에서 멀어지는 방향으로 반올림됩니다.

BOOL로 CAST 변환

CAST(expression AS BOOL)

설명

BigQuery는 BOOL로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • INT64
  • BOOL
  • STRING

변환 규칙

원본 대상 x Cast 변환 시 규칙
INT64 BOOL x0이면 FALSE, 그렇지 않으면 TRUE를 반환합니다.
STRING BOOL x"true"이면 TRUE, x"false"이면 FALSE를 반환합니다.
그 밖에 다른 x 값은 유효하지 않으며 이 경우 BOOL로 Cast 변환하지 않고 오류가 발생합니다.
STRING은 BOOL로 변환 시 대소문자를 구분하지 않습니다.

BYTES로 CAST 변환

CAST(expression AS BYTES [format_clause])

설명

BigQuery는 BYTES로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • BYTES
  • STRING

형식 절

한 유형의 표현식이 다른 유형으로 Cast 변환될 때 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. expressionSTRING이면 이 섹션의 형식 절을 사용할 수 있습니다.

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRING BYTES STRING은 UTF-8 인코딩을 사용하여 BYTES로 Cast 변환됩니다. 예를 들어 STRING '©'는 BYTES로 Cast 변환될 때 16진수 값 C2와 A9를 갖는 2바이트 시퀀스가 됩니다.

DATE로 CAST 변환

CAST(expression AS DATE [format_clause])

설명

BigQuery는 DATE로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • STRING
  • TIME
  • DATETIME
  • TIMESTAMP

형식 절

한 유형의 표현식이 다른 유형으로 Cast 변환될 때 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. expressionSTRING이면 이 섹션의 형식 절을 사용할 수 있습니다.

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRING DATE 문자열에서 날짜로 Cast 변환할 경우 문자열이 지원되는 날짜 리터럴 형식과 일치해야 하며, 이는 시간대와 관계없습니다. 문자열 표현식이 유효하지 않거나 지원되는 최소/최대 범위 밖의 날짜를 나타낼 경우 오류가 발생합니다.
TIMESTAMP DATE 타임스탬프에서 날짜로 Cast 변환할 경우 기본 시간대를 기준으로 타임스탬프가 효과적으로 잘립니다.

DATETIME으로 CAST 변환

CAST(expression AS DATETIME [format_clause])

설명

BigQuery는 DATETIME으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • STRING
  • TIME
  • DATETIME
  • TIMESTAMP

형식 절

한 유형의 표현식이 다른 유형으로 Cast 변환될 때 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. expressionSTRING이면 이 섹션의 형식 절을 사용할 수 있습니다.

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRING DATETIME 문자열에서 날짜/시간으로 Cast 변환할 경우, 문자열이 지원되는 날짜/시간 리터럴 형식과 일치해야 하며, 이는 시간대와 관계가 없습니다. 문자열 표현식이 유효하지 않거나 지원되는 최소/최대 범위 밖의 날짜/시간을 나타낼 경우, 오류가 발생합니다.
TIMESTAMP DATETIME 타임스탬프에서 날짜/시간으로 Cast 변환할 경우 기본 시간대를 기준으로 타임스탬프가 효과적으로 잘립니다.

FLOAT64로 CAST 변환

CAST(expression AS FLOAT64)

설명

BigQuery는 부동 소수점 유형으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • INT64
  • FLOAT64
  • NUMERIC
  • BIGNUMERIC
  • STRING

변환 규칙

원본 대상 x Cast 변환 시 규칙
INT64 FLOAT64 근접하지만 정확하지 않을 수 있는 부동 소수점 값을 반환합니다.
NUMERIC FLOAT64 NUMERIC은 가장 가까운 부동 소수점 수로 변환되며 정밀도가 떨어질 수 있습니다.
BIGNUMERIC FLOAT64 BIGNUMERIC은 가장 가까운 부동 소수점 수로 변환되며 정밀도가 떨어질 수 있습니다.
STRING FLOAT64 x를 부동 소수점 값으로 반환하며 유효한 부동 소수점 리터럴과 동일한 형식을 지니는 것으로 해석합니다. "[+,-]inf"에서 [,-]Infinity로, "[+,-]infinity"에서 [,-]Infinity로, "[+,-]nan"에서 NaN으로의 Cast 변환도 지원합니다. 변환 시 대소문자를 구분하지 않습니다.

INT64로 CAST 변환

CAST(expression AS INT64)

설명

BigQuery는 정수 유형으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • INT64
  • FLOAT64
  • NUMERIC
  • BIGNUMERIC
  • BOOL
  • STRING

변환 규칙

원본 대상 x Cast 변환 시 규칙
FLOAT64 INT64 가장 가까운 정수 값을 반환합니다.
1.5 또는 -0.5와 같은 중간 값은 0에서 멀어지는 방향으로 반올림됩니다.
BOOL INT64 xTRUE이면 1, 그렇지 않으면 0을 반환합니다.
STRING INT64 16진수 문자열은 정수로 Cast 변환할 수 있습니다. 예를 들어 0x123291 또는 -0x123-291입니다.

예시

16진수 문자열(0x123)로 작업하는 경우, 이 문자열을 정수로 변환할 수 있습니다.

SELECT '0x123' as hex_value, CAST('0x123' as INT64) as hex_to_int;

+-----------+------------+
| hex_value | hex_to_int |
+-----------+------------+
| 0x123     | 291        |
+-----------+------------+
SELECT '-0x123' as hex_value, CAST('-0x123' as INT64) as hex_to_int;

+-----------+------------+
| hex_value | hex_to_int |
+-----------+------------+
| -0x123    | -291       |
+-----------+------------+

INTERVAL로 CAST 변환

CAST(expression AS INTERVAL)

설명

BigQuery는 INTERVAL로의 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • STRING

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRING INTERVAL 문자열에서 간격으로 Cast 변환할 경우, 해당 문자열은 ISO 8601 Duration 표준을 따르거나 간격 리터럴 형식인 'Y-M D H:M:S.F'를 준수해야 합니다. 부분 간격 리터럴 형식도 모호하지 않은 경우라면 허용됩니다(예: 'H:M:S'). 문자열 표현식이 유효하지 않거나 지원되는 최소/최대 범위 밖의 간격을 나타낼 경우, 오류가 발생합니다.

예시

SELECT input, CAST(input AS INTERVAL) AS output
FROM UNNEST([
  '1-2 3 10:20:30.456',
  '1-2',
  '10:20:30',
  'P1Y2M3D',
  'PT10H20M30,456S'
]) input

+--------------------+--------------------+
| input              | output             |
+--------------------+--------------------+
| 1-2 3 10:20:30.456 | 1-2 3 10:20:30.456 |
| 1-2                | 1-2 0 0:0:0        |
| 10:20:30           | 0-0 0 10:20:30     |
| P1Y2M3D            | 1-2 3 0:0:0        |
| PT10H20M30,456S    | 0-0 0 10:20:30.456 |
+--------------------+--------------------+

NUMERIC으로 CAST 변환

CAST(expression AS NUMERIC)

설명

BigQuery는 NUMERIC으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • INT64
  • FLOAT64
  • NUMERIC
  • BIGNUMERIC
  • STRING

변환 규칙

원본 대상 x Cast 변환 시 규칙
FLOAT64 NUMERIC 부동 소수점 수는 0에서 멀어지는 방향으로 반올림됩니다. NaN, +inf 또는 -inf Cast 변환 시 오류가 반환됩니다. NUMERIC 범위를 벗어난 값을 Cast 변환하면 오버플로 오류가 반환됩니다.
STRING NUMERIC STRING에 포함된 숫자 리터럴은 NUMERIC 유형의 최대 정밀도 또는 범위를 초과하면 안 됩니다. 초과하면 오류가 발생합니다. 소수점 이하 자릿수가 9자리를 초과하면 결과 NUMERIC 값은 소수점 이하 자릿수가 9자리가 되도록 0에서 멀어지는 방향으로 반올림됩니다.

STRING으로 CAST 변환

CAST(expression AS STRING [format_clause [AT TIME ZONE timezone_expr]])

설명

BigQuery는 STRING으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • INT64
  • FLOAT64
  • NUMERIC
  • BIGNUMERIC
  • BOOL
  • BYTES
  • TIME
  • DATE
  • DATETIME
  • TIMESTAMP
  • INTERVAL
  • STRING

형식 절

한 유형의 표현식이 다른 유형으로 Cast 변환될 때 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. expression이 다음 데이터 유형 중 하나이면 이 섹션의 형식 절을 사용할 수 있습니다.

  • INT64
  • FLOAT64
  • NUMERIC
  • BIGNUMERIC
  • BYTES
  • TIME
  • DATE
  • DATETIME
  • TIMESTAMP

STRING의 형식 절에는 AT TIME ZONE timezone_expr이라는 선택적인 추가 절이 있습니다. 이를 사용하면 TIMESTAMP 형식을 지정하는 동안 사용할 특정 시간대를 지정할 수 있습니다. TIMESTAMP 형식을 지정할 때 이 선택적인 절이 포함되지 않았으면 현재 시간대가 사용됩니다.

자세한 내용은 다음 항목을 참조하세요.

변환 규칙

원본 대상 x Cast 변환 시 규칙
FLOAT64 STRING 근사치의 문자열 표시를 반환합니다.
BOOL STRING xTRUE이면 "true", 그렇지 않으면 "false"를 반환합니다.
BYTES STRING UTF-8 STRING으로 해석되는 x를 반환합니다.
예를 들어 BYTES 리터럴 b'\xc2\xa9'는 STRING으로 Cast 변환될 때 UTF-8로 해석되어 유니코드 문자 '©'가 됩니다.
x가 유효한 UTF-8이 아니면 오류가 발생합니다.
TIME STRING 시간 유형을 문자열로 Cast 변환하는 것은 시간대와 관계가 없으며 HH:MM:SS 형태를 갖습니다.
DATE STRING 날짜 유형을 문자열로 Cast 변환하는 것은 시간대와 관계가 없으며 YYYY-MM-DD 형태를 갖습니다.
DATETIME STRING 날짜/시간 유형을 문자열로 Cast 변환하는 것은 시간대와 관계가 없으며 YYYY-MM-DD HH:MM:SS 형태를 갖습니다.
TIMESTAMP STRING 타임스탬프 유형에서 문자열로 Cast 변환할 경우, 타임스탬프가 기본 시간대인 UTC를 사용하여 해석됩니다. 생성되는 1초 미만 자릿수의 개수는 1초 미만 단위에 따라오는 0의 개수에 따라 결정됩니다. CAST 함수는 0, 3 또는 6자릿수를 잘라냅니다.
INTERVAL STRING 간격에서 문자열로 Cast 변환하면 Y-M D H:M:S 형식이 됩니다.

예시

SELECT CAST(CURRENT_DATE() AS STRING) AS current_date

+---------------+
| current_date  |
+---------------+
| 2021-03-09    |
+---------------+
SELECT CAST(CURRENT_DATE() AS STRING FORMAT 'DAY') AS current_day

+-------------+
| current_day |
+-------------+
| MONDAY      |
+-------------+
SELECT CAST(
  TIMESTAMP '2008-12-25 00:00:00+00:00'
  AS STRING FORMAT 'YYYY-MM-DD HH24:MI:SS TZH:TZM') AS date_time_to_string

-- Results depend upon where this query was executed.
+------------------------------+
| date_time_to_string          |
+------------------------------+
| 2008-12-24 16:00:00 -08:00   |
+------------------------------+
SELECT CAST(
  TIMESTAMP '2008-12-25 00:00:00+00:00'
  AS STRING FORMAT 'YYYY-MM-DD HH24:MI:SS TZH:TZM'
  AT TIME ZONE 'Asia/Kolkata') AS date_time_to_string

-- Because the time zone is specified, the result is always the same.
+------------------------------+
| date_time_to_string          |
+------------------------------+
| 2008-12-25 05:30:00 +05:30   |
+------------------------------+
SELECT CAST(INTERVAL 3 DAY AS STRING) AS interval_to_string

+--------------------+
| interval_to_string |
+--------------------+
| 0-0 3 0:0:0        |
+--------------------+
SELECT CAST(
  INTERVAL "1-2 3 4:5:6.789" YEAR TO SECOND
  AS STRING) AS interval_to_string

+--------------------+
| interval_to_string |
+--------------------+
| 1-2 3 4:5:6.789    |
+--------------------+

STRUCT로 CAST 변환

CAST(expression AS STRUCT)

설명

BigQuery는 STRUCT로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • STRUCT

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRUCT STRUCT 다음 조건이 충족될 경우에 허용됩니다.
  1. 두 STRUCT의 필드 개수가 같습니다.
  2. 원본 STRUCT 필드 유형을 해당 대상 STRUCT 필드 유형으로 명시적으로 Cast 변환할 수 있습니다(필드 이름이 아니라 필드 순서에 의해 정의된 대로).

TIME으로 CAST 변환

CAST(expression AS TIME [format_clause])

설명

BigQuery는 TIME으로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • STRING
  • TIME
  • DATETIME
  • TIMESTAMP

형식 절

한 유형의 표현식이 다른 유형으로 Cast 변환될 때 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. expressionSTRING이면 이 섹션의 형식 절을 사용할 수 있습니다.

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRING TIME 문자열에서 시간으로 Cast 변환할 경우, 문자열이 지원되는 시간 리터럴 형식과 일치해야 하며, 이는 시간대와 관계가 없습니다. 문자열 표현식이 유효하지 않거나 지원되는 최소/최대 범위 밖의 시간을 나타낼 경우, 오류가 발생합니다.

TIMESTAMP로 CAST 변환

CAST(expression AS TIMESTAMP [format_clause [AT TIME ZONE timezone_expr]])

설명

BigQuery는 TIMESTAMP로 Cast 변환을 지원합니다. expression 매개변수는 이러한 데이터 유형의 표현식을 나타낼 수 있습니다.

  • STRING
  • TIME
  • DATETIME
  • TIMESTAMP

형식 절

한 유형의 표현식이 다른 유형으로 Cast 변환될 때 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. expressionSTRING이면 이 섹션의 형식 절을 사용할 수 있습니다.

TIMESTAMP의 형식 절에는 AT TIME ZONE timezone_expr이라는 선택적인 추가 절이 있습니다. 이를 사용하면 형식을 지정하는 동안 사용할 특정 시간대를 지정할 수 있습니다. 이 선택적인 절이 포함되지 않았으면 현재 시간대가 사용됩니다.

변환 규칙

원본 대상 x Cast 변환 시 규칙
STRING TIMESTAMP 문자열에서 타임스탬프로 Cast 변환할 경우 string_expression이 지원되는 타임스탬프 리터럴 형식과 일치해야 하며, 그렇지 않으면 런타임 오류가 발생합니다. string_expression 자체에는 시간대가 포함될 수 있습니다.

string_expression에 시간대가 있으면 해당 시간대가 변환에 사용되고, 그렇지 않으면 기본 시간대인 UTC가 사용됩니다. 문자열이 6자리 미만이면 묵시적으로 확장됩니다.

string_expression이 유효하지 않거나, 1초 미만 자릿수가 6자리보다 많거나(즉, 정밀도가 마이크로초 이상인 경우), 지원되는 타임스탬프 범위 밖의 시간을 나타내는 경우 오류가 발생합니다.
DATE TIMESTAMP 날짜에서 타임스탬프로 Cast 변환할 경우 date_expression은 기본 시간대인 UTC의 자정(하루의 시작)을 기준으로 해석됩니다.
DATETIME 타임스탬프 날짜/시간에서 타임스탬프로 Cast 변환할 경우 datetime_expression은 기본 시간대인 UTC를 기준으로 해석됩니다.

대부분의 유효한 날짜/시간 값은 각 시간대에서 정확히 하나의 해당하는 타임스탬프를 갖습니다. 그러나 해당하는 타임스탬프 값이 0개 또는 2개 있는 유효한 날짜/시간 값과 시간대의 특정 조합이 있습니다. 이는 일광 절약 시간과 같이 시계가 앞으로 설정되거나 뒤로 설정되는 시간대에서 발생합니다. 유효한 타임스탬프가 2개 있는 경우 앞의 타임스탬프가 사용됩니다. 유효한 타임스탬프가 없으면 시간 간격(일반적으로 1시간)의 길이가 날짜/시간에 추가됩니다.

예시

다음은 문자열 형식의 타임스탬프를 타임스탬프로 변환하는 예시입니다.

SELECT CAST("2020-06-02 17:00:53.110+00:00" AS TIMESTAMP) AS as_timestamp

-- Results depend upon where this query was executed.
+-----------------------------+
| as_timestamp                |
+-----------------------------+
| 2020-06-03 00:00:53.110 UTC |
+-----------------------------+

다음 예시는 문자열 형식의 날짜 및 시간을 타임스탬프로 Cast 변환합니다. 다음 예시는 이전 예시와 동일한 출력을 반환합니다.

SELECT CAST("06/02/2020 17:00:53.110" AS TIMESTAMP FORMAT 'MM/DD/YYYY HH:MI:SS' AT TIME ZONE 'America/Los_Angeles') AS as_timestamp
SELECT CAST("06/02/2020 17:00:53.110" AS TIMESTAMP FORMAT 'MM/DD/YYYY HH:MI:SS' AT TIME ZONE '00') AS as_timestamp
SELECT CAST('06/02/2020 17:00:53.110 +00' AS TIMESTAMP FORMAT 'YYYY-MM-DD HH:MI:SS TZH') AS as_timestamp

PARSE_BIGNUMERIC

PARSE_BIGNUMERIC(string_expression)

설명

문자열을 BIGNUMERIC 값으로 변환합니다.

문자열에 포함된 숫자 리터럴은 BIGNUMERIC 유형의 최대 정밀도 또는 범위를 초과하면 안 됩니다. 초과하면 오류가 발생합니다. 소수점 이하 자릿수가 38자리를 초과하면 결과 BIGNUMERIC 값은 소수점 이하 자릿수가 38자리가 되도록 0에서 멀어지는 방향으로 반올림됩니다.


-- This example shows how a string with a decimal point is parsed.
SELECT PARSE_BIGNUMERIC("123.45") AS parsed

+--------+
| parsed |
+--------+
| 123.45 |
+--------+

-- This example shows how a string with an exponent is parsed.
SELECT PARSE_BIGNUMERIC("123.456E37") AS parsed

+-----------------------------------------+
| parsed                                  |
+-----------------------------------------+
| 123400000000000000000000000000000000000 |
+-----------------------------------------+

-- This example shows the rounding when digits after the decimal point exceeds 38.
SELECT PARSE_BIGNUMERIC("1.123456789012345678901234567890123456789") as parsed

+------------------------------------------+
| parsed                                   |
+------------------------------------------+
| 1.12345678901234567890123456789012345679 |
+------------------------------------------+

이 함수는 CAST AS BIGNUMERIC 함수를 사용하는 것과 비슷하지만 PARSE_BIGNUMERIC 함수는 문자열 입력만 허용하며 문자열에서 다음을 허용합니다.

  • 부호(+/-)와 숫자 사이의 공백
  • 숫자 뒤의 부호(+/-)

유효한 입력 문자열의 규칙:

규칙 예시 입력 출력
문자열은 숫자, 쉼표, 소수점, 부호만 포함할 수 있습니다. '- 12,34567,89.0' -123456789
공백은 숫자 사이를 제외하고 모든 위치에서 허용됩니다. ' - 12.345 ' -12.345
소수점 앞에서 숫자와 쉼표만 허용됩니다. ' 12,345,678' 12345678
소수점 뒤에서 숫자만 허용됩니다. '1.234 ' 1.234
지수에는 E 또는 e를 사용합니다. e 다음에는 숫자 및 선행 부호 표시가 허용됩니다. ' 123.45e-1' 12.345
정수 부분이 비어 있지 않으면 숫자를 하나 이상 포함해야 합니다. ' 0,.12 -' -0.12
문자열에 소수점이 있으면 숫자를 하나 이상 포함해야 합니다. ' .1' 0.1
문자열은 한 개를 초과하는 부호를 포함할 수 없습니다. ' 0.5 +' 0.5

반환 데이터 유형

BIGNUMERIC

예시

이 예시는 부호 앞과 뒤 그리고 부호와 숫자 사이의 공백이 있는 입력을 보여줍니다.

SELECT PARSE_BIGNUMERIC("  -  12.34 ") as parsed;

+--------+
| parsed |
+--------+
| -12.34 |
+--------+

이 예시는 숫자 뒤의 부호는 물론 지수가 포함된 입력을 보여줍니다.

SELECT PARSE_BIGNUMERIC("12.34e-1-") as parsed;

+--------+
| parsed |
+--------+
| -1.234 |
+--------+

이 예시에서는 숫자의 정수 부분에 쉼표가 여러 개 포함된 입력을 보여줍니다.

SELECT PARSE_BIGNUMERIC("  1,2,,3,.45 + ") as parsed;

+--------+
| parsed |
+--------+
| 123.45 |
+--------+

다음 예시에서는 소수점이 있고 정수 숫자가 없는 입력을 보여줍니다.

SELECT PARSE_BIGNUMERIC(".1234  ") as parsed;

+--------+
| parsed |
+--------+
| 0.1234 |
+--------+

잘못된 입력 예시

이 예시는 정수 숫자 부분에 숫자가 없기 때문에 잘못되었습니다.

SELECT PARSE_BIGNUMERIC(",,,.1234  ") as parsed;

이 예시는 숫자 사이에 공백이 있기 때문에 잘못되었습니다.

SELECT PARSE_BIGNUMERIC("1  23.4 5  ") as parsed;

이 예시는 지수를 제외하고 숫자가 비어 있기 때문에 잘못되었습니다.

SELECT PARSE_BIGNUMERIC("  e1 ") as parsed;

이 예시는 문자열에 여러 부호가 포함되기 때문에 잘못되었습니다.

SELECT PARSE_BIGNUMERIC("  - 12.3 - ") as parsed;

이 예시는 숫자의 값이 BIGNUMERIC 범위를 벗어나기 때문에 잘못되었습니다.

SELECT PARSE_BIGNUMERIC("12.34E100 ") as parsed;

이 예시는 문자열에 잘못된 문자가 있기 때문에 잘못되었습니다.

SELECT PARSE_BIGNUMERIC("$12.34") as parsed;

PARSE_NUMERIC

PARSE_NUMERIC(string_expression)

설명

문자열을 NUMERIC 값으로 변환합니다.

문자열에 포함된 숫자 리터럴은 NUMERIC 유형의 최대 정밀도 또는 범위를 초과하면 안 됩니다. 초과하면 오류가 발생합니다. 소수점 이하 자릿수가 9자리를 초과하면 결과 NUMERIC 값은 소수점 이하 자릿수가 9자리가 되도록 0에서 멀어지는 방향으로 반올림됩니다.


-- This example shows how a string with a decimal point is parsed.
SELECT PARSE_NUMERIC("123.45") AS parsed

+--------+
| parsed |
+--------+
| 123.45 |
+--------+

-- This example shows how a string with an exponent is parsed.
SELECT PARSE_NUMERIC("12.34E27") as parsed

+-------------------------------+
| parsed                        |
+-------------------------------+
| 12340000000000000000000000000 |
+-------------------------------+

-- This example shows the rounding when digits after the decimal point exceeds 9.
SELECT PARSE_NUMERIC("1.0123456789") as parsed

+-------------+
| parsed      |
+-------------+
| 1.012345679 |
+-------------+

이 함수는 CAST AS NUMERIC 함수를 사용하는 것과 비슷하지만 PARSE_NUMERIC 함수는 문자열 입력만 허용하며 문자열에서 다음을 허용합니다.

  • 부호(+/-)와 숫자 사이의 공백
  • 숫자 뒤의 부호(+/-)

유효한 입력 문자열의 규칙:

규칙 예시 입력 출력
문자열은 숫자, 쉼표, 소수점, 부호만 포함할 수 있습니다. '- 12,34567,89.0' -123456789
공백은 숫자 사이를 제외하고 모든 위치에서 허용됩니다. ' - 12.345 ' -12.345
소수점 앞에서 숫자와 쉼표만 허용됩니다. ' 12,345,678' 12345678
소수점 뒤에서 숫자만 허용됩니다. '1.234 ' 1.234
지수에는 E 또는 e를 사용합니다. e 다음에는 숫자 및 선행 부호 표시가 허용됩니다. ' 123.45e-1' 12.345
정수 부분이 비어 있지 않으면 숫자를 하나 이상 포함해야 합니다. ' 0,.12 -' -0.12
문자열에 소수점이 있으면 숫자를 하나 이상 포함해야 합니다. ' .1' 0.1
문자열은 한 개를 초과하는 부호를 포함할 수 없습니다. ' 0.5 +' 0.5

반환 데이터 유형

NUMERIC

예시

이 예시는 부호 앞과 뒤 그리고 부호와 숫자 사이의 공백이 있는 입력을 보여줍니다.

SELECT PARSE_NUMERIC("  -  12.34 ") as parsed;

+--------+
| parsed |
+--------+
| -12.34 |
+--------+

이 예시는 숫자 뒤의 부호는 물론 지수가 포함된 입력을 보여줍니다.

SELECT PARSE_NUMERIC("12.34e-1-") as parsed;

+--------+
| parsed |
+--------+
| -1.234 |
+--------+

이 예시에서는 숫자의 정수 부분에 쉼표가 여러 개 포함된 입력을 보여줍니다.

SELECT PARSE_NUMERIC("  1,2,,3,.45 + ") as parsed;

+--------+
| parsed |
+--------+
| 123.45 |
+--------+

다음 예시에서는 소수점이 있고 정수 숫자가 없는 입력을 보여줍니다.

SELECT PARSE_NUMERIC(".1234  ") as parsed;

+--------+
| parsed |
+--------+
| 0.1234 |
+--------+

잘못된 입력 예시

이 예시는 정수 숫자 부분에 숫자가 없기 때문에 잘못되었습니다.

SELECT PARSE_NUMERIC(",,,.1234  ") as parsed;

이 예시는 숫자 사이에 공백이 있기 때문에 잘못되었습니다.

SELECT PARSE_NUMERIC("1  23.4 5  ") as parsed;

이 예시는 지수를 제외하고 숫자가 비어 있기 때문에 잘못되었습니다.

SELECT PARSE_NUMERIC("  e1 ") as parsed;

이 예시는 문자열에 여러 부호가 포함되기 때문에 잘못되었습니다.

SELECT PARSE_NUMERIC("  - 12.3 - ") as parsed;

이 예시는 숫자의 값이 BIGNUMERIC 범위를 벗어나기 때문에 잘못되었습니다.

SELECT PARSE_NUMERIC("12.34E100 ") as parsed;

이 예시는 문자열에 잘못된 문자가 있기 때문에 잘못되었습니다.

SELECT PARSE_NUMERIC("$12.34") as parsed;

SAFE_CAST

SAFE_CAST(expression AS typename [format_clause])

설명

CAST 사용 시 BigQuery가 변환을 수행할 수 없으면 쿼리가 실패할 수 있습니다. 예를 들어 다음 쿼리는 오류를 생성합니다.

SELECT CAST("apple" AS INT64) AS not_a_number;

이런 유형의 오류에서 쿼리를 보호하기 위해 SAFE_CAST를 사용할 수 있습니다. SAFE_CAST는 오류를 발생시키지 않고 NULL을 반환한다는 점을 제외하면 CAST와 동일합니다.

SELECT SAFE_CAST("apple" AS INT64) AS not_a_number;

+--------------+
| not_a_number |
+--------------+
| NULL         |
+--------------+

바이트에서 문자열로 Cast 변환하려면 SAFE_CONVERT_BYTES_TO_STRING 함수를 사용해도 됩니다. 유효하지 않은 UTF-8 문자는 유니코드 대체 문자 U+FFFD로 대체됩니다. 자세한 내용은 SAFE_CONVERT_BYTES_TO_STRING을 참조하세요.

기타 변환 함수

이러한 변환 함수에 대한 자세한 내용은 문서의 다른 위치를 참조하세요.

변환 함수 원본 대상
ARRAY_TO_STRING ARRAY STRING
BOOL JSON BOOL
DATE 다양한 데이터 유형 DATE
DATETIME 다양한 데이터 유형 DATETIME
FLOAT64 JSON FLOAT64
FROM_BASE32 STRING BYTES
FROM_BASE64 STRING BYTES
FROM_HEX STRING BYTES
INT64 JSON INT64
PARSE_DATE STRING DATE
PARSE_DATETIME STRING DATETIME
PARSE_JSON STRING JSON
PARSE_TIME STRING TIME
PARSE_TIMESTAMP STRING TIMESTAMP
SAFE_CONVERT_BYTES_TO_STRING BYTES STRING
STRING TIMESTAMP STRING
STRING JSON 문자열
TIME 다양한 데이터 유형 TIME
TIMESTAMP 다양한 데이터 유형 TIMESTAMP
TO_BASE32 BYTES STRING
TO_BASE64 BYTES STRING
TO_HEX BYTES STRING
TO_JSON 모든 데이터 유형 JSON
TO_JSON_STRING 모든 데이터 유형 STRING

CAST용 형식 절

format_clause:
  FORMAT format_model

format_model:
  format_string_expression

이 형식 절은 일부 CAST 함수에서 사용될 수 있습니다. 형식 절을 사용하여 Cast 생성 방법에 대한 안내를 제공할 수 있습니다. 예를 들어 바이트 시퀀스를 UTF-8 인코딩 문자열 대신 BASE64 인코딩 문자열로 변환하도록 Cast를 안내할 수 있습니다.

형식 절에는 형식 모델이 포함됩니다. 형식 모델은 형식 문자열과 함께 결합된 형식 요소를 포함할 수 있습니다.

바이트를 문자열 형식으로 지정

CAST(bytes_expression AS STRING FORMAT format_string_expression)

형식 문자열의 형식 요소를 사용하여 바이트 시퀀스를 문자열로 Cast 변환할 수 있습니다. 형식 요소를 사용하여 바이트 형식을 지정할 수 없으면 오류가 반환됩니다. 바이트 시퀀스가 NULL이면 결과가 NULL입니다. 형식 요소는 대소문자를 구분하지 않습니다.

형식 요소 반환 예시
HEX 바이트 시퀀스를 16진수 문자열로 변환합니다. 입력: b'\x00\x01\xEF\xFF'
출력: 0001efff
BASEX 바이트 시퀀스를 BASEX 인코딩 문자열로 변환합니다. X는 2, 8, 16, 32, 64 숫자 중 하나를 나타냅니다. BASE8로 입력: b'\x02\x11\x3B'
출력: 00410473
BASE64M 바이트 시퀀스를 MIME용 rfc 2045를 기반으로 BASE64 인코딩 문자열로 변환합니다. 76자마다 줄바꿈 문자('\n')를 생성합니다. 입력: b'\xde\xad\xbe\xef'
출력: 3q2+7w==
ASCII ASCII 값인 바이트 시퀀스를 문자열로 변환합니다. 입력에 올바른 ASCII 인코딩이 아닌 바이트가 포함된 경우 오류가 반환됩니다. 입력: b'\x48\x65\x6c\x6c\x6f'
출력: Hello
UTF-8 UTF-8 값인 바이트 시퀀스를 문자열로 변환합니다. 입력에 올바른 UTF-8 인코딩이 아닌 바이트가 포함된 경우 오류가 반환됩니다. 입력: b'\x24'
출력: $
UTF8 UTF-8과 동일한 동작입니다.

반환 유형

STRING

예시

SELECT CAST(b'\x48\x65\x6c\x6c\x6f' AS STRING FORMAT 'ASCII') AS bytes_to_string;

+-----------------+
| bytes_to_string |
+-----------------+
| Hello           |
+-----------------+

문자열을 바이트 형식으로 지정

CAST(string_expression AS BYTES FORMAT format_string_expression)

형식 문자열에서 형식 요소를 사용하여 문자열을 바이트로 Cast 변환할 수 있습니다. 형식 요소로 문자열 형식을 지정할 수 없으면 오류가 반환됩니다. 형식 요소는 대소문자를 구분하지 않습니다.

문자열 표현식에서 \n과 같은 공백 문자는 BASE64 또는 BASE64M 형식 요소가 사용된 경우에 무시됩니다.

형식 요소 반환 예시
HEX 16진수 인코딩 문자열을 바이트로 변환합니다. 입력에 HEX 인코딩 알파벳(0~9, 대소문자를 구분하지 않는 a~f)에 속하지 않는 문자가 포함된 경우 오류가 반환됩니다. 입력: '0001efff'
출력: b'\x00\x01\xEF\xFF'
BASEX BASEX 인코딩 문자열을 바이트로 변환합니다. X는 2, 8, 16, 32, 64 숫자 중 하나를 나타냅니다. 형식 요소가 BASE64인 경우 공백 문자를 제외하고 BASEX 인코딩 알파벳에 포함되지 않는 문자가 입력에 포함된 경우 오류가 반환됩니다. BASE8로 입력: '00410473'
출력: b'\x02\x11\x3B'
BASE64M BASE64 인코딩 문자열을 바이트로 변환합니다. 공백이 아니고 rfc 2045에서 정의된 BASE64 인코딩 알파벳에 속하지 않는 문자가 입력에 포함된 경우 오류가 반환됩니다. BASE64M 및 BASE64 디코딩은 동작이 동일합니다. 입력: '3q2+7w=='
출력: b'\xde\xad\xbe\xef'
ASCII ASCII 문자만 있는 문자열을 바이트로 변환합니다. 입력에 ASCII 문자가 아닌 문자가 포함되었으면 오류가 반환됩니다. 입력: 'Hello'
출력: b'\x48\x65\x6c\x6c\x6f'
UTF-8 문자열을 UTF-8 바이트 시퀀스로 변환합니다. 입력: '$'
출력: b'\x24'
UTF8 UTF-8과 동일한 동작입니다.

반환 유형

BYTES

예시

SELECT CAST('Hello' AS BYTES FORMAT 'ASCII') AS string_to_bytes

+-------------------------+
| string_to_bytes         |
+-------------------------+
| b'\x48\x65\x6c\x6c\x6f' |
+-------------------------+

날짜 및 시간을 문자열 형식으로 지정

다음 날짜 및 시간 부분을 문자열 형식으로 지정할 수 있습니다.

대소문자 일치는 일부 날짜 또는 시간 부분을 문자열 형식으로 지정하고 출력에 문자가 포함될 때 지원됩니다. 자세한 내용은 대소문자 일치를 참조하세요.

대소문자 일치

일부 형식 요소의 출력에 문자가 포함된 경우 출력의 대소문자가 형식 요소의 대소문자와 일치합니다. 즉, 형식 요소의 대문자 표시 방법에 따라 출력이 대문자로 표시됩니다. 이를 대소문자 일치라고 부릅니다. 규칙은 다음과 같습니다.

  • 요소의 처음 두 글자가 둘 다 대문자이면 출력의 단어가 대문자로 표시됩니다. 예를 들면 DAY = THURSDAY입니다.
  • 요소의 첫 글자가 대문자이고 두 번째 글자가 소문자이면 출력의 각 단어의 첫 글자가 대문자로 표시되고 다른 글자는 소문자입니다. 예를 들면 Day = Thursday입니다.
  • 요소의 첫 글자가 소문자이면 출력의 모든 문자가 소문자입니다. 예를 들면 day = thursday입니다.

연도 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

연도 부분을 포함하는 데이터 유형을 문자열로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 연도가 있는 데이터 유형을 포함합니다.
  • format_string_expression: 연도 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 연도 부분을 포함합니다.

  • DATE
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
YYYY 연도, 4자리 이상 숫자 입력: DATE '2018-01-30'
출력: 2018
입력: DATE '76-01-30'
출력: 0076
입력: DATE '10000-01-30'
출력: 10000
YYY 연도, 마지막 3자리 숫자만 입력: DATE '2018-01-30'
출력: 018
입력: DATE '98-01-30'
출력: 098
YY 연도, 마지막 2자리 숫자만 입력: DATE '2018-01-30'
출력: 18
입력: DATE '8-01-30'
출력: 08
Y 연도, 마지막 숫자만 입력: DATE '2018-01-30'
출력: 8
RRRR YYYY와 동일한 동작입니다.
RR YY와 동일한 동작입니다.

반환 유형

STRING

예시

SELECT CAST(DATE '2018-01-30' AS STRING FORMAT 'YYYY') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 2018                |
+---------------------+

월 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

월 부분을 포함하는 데이터 유형을 문자열로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 월이 있는 데이터 유형을 포함합니다.
  • format_string_expression: 월 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 월 부분을 포함합니다.

  • DATE
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
MM 월, 2자리 숫자 입력: DATE '2018-01-30'
출력: 01
MON 3자로 축약된 월 이름입니다. en-US 언어의 축약된 월 이름은 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC입니다. 대소문자 일치가 지원됩니다. 입력: DATE '2018-01-30'
출력: JAN
MONTH 월의 이름입니다. 대소문자 일치가 지원됩니다. 입력: DATE '2018-01-30'
출력: JANUARY

반환 유형

STRING

예시

SELECT CAST(DATE '2018-01-30' AS STRING FORMAT 'MONTH') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| JANUARY             |
+---------------------+

일 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

일 부분을 포함하는 데이터 유형을 문자열로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 일이 있는 데이터 유형을 포함합니다.
  • format_string_expression: 일 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 일 부분을 포함합니다.

  • DATE
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
DAY 현지화된 요일입니다. 출력 크기가 정확히 9가 되도록 오른쪽에 패딩이 추가됩니다. 대소문자 일치가 지원됩니다. 입력: DATE '2020-12-31'
출력: THURSDAY
DY 현지화된 요일 이름을 나타내는 약어의 이름(3자)입니다. 주중의 약어는 en-US로, MON, TUE, WED, THU, FRI, SAT, SUN입니다. 대소문자 일치가 지원됩니다. 입력: DATE '2020-12-31'
출력: THU
D 일요일(1)부터 시작하는 1~7까지의 주중 요일입니다. 입력: DATE '2020-12-31'
출력: 4
DD 해당 월의 2자리 수 일자입니다. 입력: DATE '2018-12-02'
출력: 02
DDD 해당 연도의 3자리 수 일자입니다. 입력: DATE '2018-02-03'
출력: 034

반환 유형

STRING

예시

SELECT CAST(DATE '2018-02-15' AS STRING FORMAT 'DD') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 15                  |
+---------------------+

시간 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

시간 부분을 포함하는 데이터 유형을 문자열로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 시간이 있는 데이터 유형을 포함합니다.
  • format_string_expression: 시간 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 시간 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
HH 12시간 기준의 2자리 수로 표시된 하루 중 시간입니다. 입력: TIME '21:30:00'
출력: 09
HH12 12시간 기준의 하루 중 시간입니다. 입력: TIME '21:30:00'
출력: 09
HH24 24시간 기준의 2자리 수로 표시된 하루 중 시간입니다. 입력: TIME '21:30:00'
출력: 21

반환 유형

STRING

예시

SELECT CAST(TIME '21:30:00' AS STRING FORMAT 'HH24') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 21                  |
+---------------------+
SELECT CAST(TIME '21:30:00' AS STRING FORMAT 'HH12') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 09                  |
+---------------------+

분 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

분 부분을 포함하는 데이터 유형을 문자열로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 분이 있는 데이터 유형을 포함합니다.
  • format_string_expression: 분 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 분 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
MI 2자리 수로 표시되는 분입니다. 입력: TIME '01:02:03'
출력: 02

반환 유형

STRING

예시

SELECT CAST(TIME '21:30:00' AS STRING FORMAT 'MI') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 30                  |
+---------------------+

초 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

초 부분을 포함하는 데이터 유형을 문자열로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 초가 있는 데이터 유형을 포함합니다.
  • format_string_expression: 초 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 초 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
SS 2자리 수로 표시된 해당 분의 초입니다. 입력: TIME '01:02:03'
출력: 03
SSSSS 5자리 수로 표시된 해당 일자의 초입니다. 입력: TIME '01:02:03'
출력: 03723
FFn n 자리 수 길이로 표시된 해당 초의 소수점 이하 부분입니다. n을 1~9까지 숫자로 바꿉니다. 예를 들어 FF5입니다. 초의 소수점 이하 부분은 출력 크기에 맞게 반올림됩니다. FF1의 입력: TIME '01:05:07.16'
출력: 1
FF2의 입력: TIME '01:05:07.16'
출력: 16
FF3의 입력: TIME '01:05:07.16'
출력: 016

반환 유형

STRING

예시

SELECT CAST(TIME '21:30:25.16' AS STRING FORMAT 'SS') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 25                  |
+---------------------+
SELECT CAST(TIME '21:30:25.16' AS STRING FORMAT 'FF2') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| 16                  |
+---------------------+

자오선 표시를 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

자오선 표시 부분을 포함하는 데이터 유형을 문자열 형식으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 자오선 표시가 있는 데이터 유형을 포함합니다.
  • format_string_expression: 자오선 표시 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 자오선 표시 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
A.M. 시간이 12시 이전이면 A.M.이고 그렇지 않으면 P.M.입니다. 출력되는 문자의 대소문자는 형식 요소의 첫 글자의 대소문자에 따라 결정됩니다. A.M.의 입력: TIME '01:02:03'
출력: A.M.
A.M.의 입력: TIME '16:02:03'
출력: P.M.
a.m.의 입력: TIME '01:02:03'
출력: a.m.
a.M.의 입력: TIME '01:02:03'
출력: a.m.
AM 시간이 12시 이전이면 AM이고 그렇지 않으면 PM입니다. 출력되는 문자의 대소문자는 형식 요소의 첫 글자의 대소문자에 따라 결정됩니다. AM의 입력: TIME '01:02:03'
출력: AM
AM의 입력: TIME '16:02:03'
출력: PM
am의 입력: TIME '01:02:03'
출력: am
aM의 입력: TIME '01:02:03'
출력: am
P.M. 출력은 A.M. 형식 요소와 동일합니다.
PM 출력은 AM 형식 요소와 동일합니다.

반환 유형

STRING

예시

SELECT CAST(TIME '21:30:00' AS STRING FORMAT 'AM') AS date_time_to_string;
SELECT CAST(TIME '21:30:00' AS STRING FORMAT 'PM') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| PM                  |
+---------------------+
SELECT CAST(TIME '01:30:00' AS STRING FORMAT 'AM') AS date_time_to_string;
SELECT CAST(TIME '01:30:00' AS STRING FORMAT 'PM') AS date_time_to_string;

+---------------------+
| date_time_to_string |
+---------------------+
| AM                  |
+---------------------+

시간대 부분을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)

시간대 부분을 포함하는 데이터 유형을 문자열 형식으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • expression: 이 표현식은 형식을 지정하려는 시간대가 있는 데이터 유형을 포함합니다.
  • format_string_expression: 시간대 형식 요소가 있는 형식 요소를 포함하는 문자열입니다.

다음 데이터 유형은 시간대 부분을 포함합니다.

  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

expression 또는 format_string_expressionNULL이면 반환 값이 NULL입니다. format_string_expression이 빈 문자열이면 출력이 빈 문자열입니다. 지원되는 형식 요소가 아닌 값이 format_string_expression 또는 expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
TZH 시간대의 시간 오프셋입니다. +/- 부호와 2자리 수 시간을 포함합니다. 입력 스탬프: TIMESTAMP '2008-12-25 05:30:00+00' 출력: −08
TZM 시간대의 분 오프셋입니다. 여기에는 2자리 수 분만 포함됩니다. 입력 스탬프: TIMESTAMP '2008-12-25 05:30:00+00' 출력: 00

반환 유형

STRING

예시

SELECT CAST(TIMESTAMP '2008-12-25 00:00:00+00:00' AS STRING FORMAT 'TZH') AS date_time_to_string;

-- Results depend upon where this query was executed.
+---------------------+
| date_time_to_string |
+---------------------+
| -08                 |
+---------------------+
SELECT CAST(TIMESTAMP '2008-12-25 00:00:00+00:00' AS STRING FORMAT 'TZH' AT TIME ZONE 'Asia/Kolkata')
AS date_time_to_string;

-- Because the time zone is specified, the result is always the same.
+---------------------+
| date_time_to_string |
+---------------------+
| +05                 |
+---------------------+
SELECT CAST(TIMESTAMP '2008-12-25 00:00:00+00:00' AS STRING FORMAT 'TZM') AS date_time_to_string;

-- Results depend upon where this query was executed.
+---------------------+
| date_time_to_string |
+---------------------+
| 00                  |
+---------------------+
SELECT CAST(TIMESTAMP '2008-12-25 00:00:00+00:00' AS STRING FORMAT 'TZM' AT TIME ZONE 'Asia/Kolkata')
AS date_time_to_string;

-- Because the time zone is specified, the result is always the same.
+---------------------+
| date_time_to_string |
+---------------------+
| 30                  |
+---------------------+

리터럴을 문자열 형식으로 지정

CAST(expression AS STRING FORMAT format_string_expression)
형식 요소 반환 예시
- 출력은 입력과 동일합니다. -
. 출력은 입력과 동일합니다. .
/ 출력은 입력과 동일합니다. /
, 출력은 입력과 동일합니다. ,
' 출력은 입력과 동일합니다. '
; 출력은 입력과 동일합니다. ;
: 출력은 입력과 동일합니다. :
공백 출력은 입력과 동일합니다. 공백은 공백 문자(ASCII 32)를 의미하며 탭이나 줄바꿈처럼 다른 유형의 공간이 아닙니다. 형식 모델에서 ASCII 32 문자가 아닌 모든 공백 문자는 오류를 일으킵니다.
"텍스트" 출력은 큰따옴표 안에 있는 값입니다. 큰따옴표 또는 백슬래시 문자를 보존하려면 \" 또는 \\ 이스케이프 시퀀스를 사용합니다. 다른 이스케이프 시퀀스는 지원되지 않습니다. 입력: "abc"
출력: abc
입력: "a\"b\\c"
출력: a"b\c

문자열을 날짜 및 시간 형식으로 지정

문자열을 날짜 및 시간 부분 형식으로 지정할 수 있습니다.

문자열을 날짜 및 시간 부분 형식을 지정할 때는 형식 모델 규칙을 따라야 합니다.

형식 모델 규칙

문자열을 날짜 및 시간 부분으로 Cast 변환할 때는 형식 모델이 올바른지 확인해야 합니다. 형식 모델은 CAST(string_expression AS type FORMAT format_string_expression)format_string_expression으로 전달된 요소를 나타내며, 다음 규칙에 따라 검증됩니다.

  • 여기에는 자오선 표시, 연도, 월, 일자, 시간 등의 각 부분 중 최대 하나가 포함됩니다.
  • 리터럴이 아닌 비공백 형식 요소는 한 번을 초과하여 표시될 수 없습니다.
  • 연도 형식 요소의 일자인 DDD를 포함하는 경우 월을 포함할 수 없습니다.
  • 24시간 형식 요소인 HH24를 포함하는 경우 12시간 형식 요소 또는 자오선 표시를 포함할 수 없습니다.
  • 12시간 형식 요소인 HH12 또는 HH를 포함하는 경우에도 자오선 표시를 포함할 수 없습니다.
  • 자오선 표시가 포함된 경우 12시간 형식 요소도 포함해야 합니다.
  • 일자 형식 요소의 초인 SSSSS를 포함하는 경우 시간, 분, 초, 자오선 표시를 포함할 수 없습니다.
  • 속성 요소를 포함할 수 없으므로 설정된 값이 대상 유형에 존재하지 않습니다. 예를 들어 HH24와 같은 시간 형식 요소는 DATE로 Cast 변환 중인 문자열에 표시될 수 없습니다.

문자열을 연도 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 연도를 연도 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 연도가 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 연도 부분을 포함해야 합니다.
  • format_string_expression: 연도 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 연도 부분을 포함합니다.

  • DATE
  • DATETIME
  • TIMESTAMP

YEAR 부분이 string_expression에 누락되었고 반환 유형이 이 부분을 포함하면 YEAR가 현재 연도로 설정됩니다.

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
YYYY 분리된 경우 1~5자리 숫자와 일치합니다. 지정되지 않은 경우 4자리 숫자와 일치합니다. 연도 부분을 일치하는 숫자로 설정합니다. MM-DD-YYYY의 입력: '03-12-2018'
DATE로 출력: 2018-12-03
YYYY-MMDD의 입력: '10000-1203'
DATE로 출력: 10000-12-03
YYYY의 입력: '18'
DATE로 출력: 2018-03-01(현재 날짜가 2021년 3월 23일이라고 가정)
YYY 3자리 숫자와 일치합니다. 연도 부분의 마지막 3자리 숫자를 일치하는 숫자로 설정합니다. YYY-MM-DD의 입력: '018-12-03'
DATE로 출력: 2018-12-03
YYY-MM-DD의 입력: '038-12-03'
DATE로 출력: 2038-12-03
YY 2자리 숫자와 일치합니다. 연도 부분의 마지막 2자리 숫자를 일치하는 숫자로 설정합니다. YY-MM-DD의 입력: '18-12-03'
DATE로 출력: 2018-12-03
YY-MM-DD의 입력: '38-12-03'
DATE로 출력: 2038-12-03
Y 1자리 숫자와 일치합니다. 연도 부분의 마지막 숫자를 일치하는 숫자로 설정합니다. Y-MM-DD의 입력: '8-12-03'
DATE로 출력: 2008-12-03
Y,YYY 1~2자리 숫자, 쉼표, 정확히 3자리 숫자의 패턴과 일치합니다. 연도 부분을 일치하는 숫자로 설정합니다. Y,YYY-MM-DD의 입력: '2,018-12-03'
DATE로 출력: 2008-12-03
RRRR YYYY와 동일한 동작입니다.
RR

2자리 숫자와 일치합니다.

입력한 2자리 숫자가 00~49 사이이고, 현재 연도의 마지막 2자리 숫자가 00~49 사이이면 반환된 연도의 처음 2자리 숫자가 현재 연도와 동일합니다. 현재 연도의 마지막 2자리 숫자가 50~99 사이이면, 반환된 연도의 처음 2자리 숫자가 현재 연도의 처음 2자리 숫자보다 1 큽니다.

입력한 2자리 숫자가 50~99 사이이고 현재 연도의 마지막 2자리 숫자가 00~49 사이이면 반환된 연도의 처음 2자리 숫자가 현재 연도의 처음 2자리 숫자보다 1 작습니다. 현재 연도의 마지막 2자리 숫자가 50-99 사이이면 반환된 연도의 처음 2자리 숫자가 현재 연도와 동일합니다.

RR-MM-DD의 입력: '18-12-03'
DATE로 출력: 2018-12-03(2021년에 실행) DATE로 출력: 2118-12-03(2050년에 실행)
RR-MM-DD의 입력: '50-12-03'
DATE로 출력: 2050-12-03(2021년에 실행) DATE로 출력: 2050-12-03(2050년에 실행)

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • DATE
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('18-12-03' AS DATE FORMAT 'YY-MM-DD') AS string_to_date

+----------------+
| string_to_date |
+----------------+
| 2018-02-03     |
+----------------+

문자열을 월 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 월을 월 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 월이 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 월 부분을 포함해야 합니다.
  • format_string_expression: 월 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 월 부분을 포함합니다.

  • DATE
  • DATETIME
  • TIMESTAMP

MONTH 부분이 string_expression에 누락되었고 반환 유형이 이 부분을 포함하면 MONTH가 현재 월로 설정됩니다.

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
MM 2자리 숫자와 일치합니다. 월 부분을 일치하는 숫자로 설정합니다. MM-DD-YYYY의 입력: '03-12-2018'
DATE로 출력: 2018-12-03
MON 3개 문자와 일치합니다. 월 부분을 해당 월의 축약된 이름으로 해석되는 일치하는 문자열로 설정합니다. MON DD, YYYY의 입력: 'DEC 03, 2018'
DATE로 출력: 2018-12-03
MONTH 9개 문자와 일치합니다. 월 부분을 해당 월의 이름으로 해석되는 일치하는 문자열로 설정합니다. MONTH DD, YYYY의 입력: 'DECEMBER 03, 2018'
DATE로 출력: 2018-12-03

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • DATE
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('DEC 03, 2018' AS DATE FORMAT 'MON DD, YYYY') AS string_to_date

+----------------+
| string_to_date |
+----------------+
| 2018-12-03     |
+----------------+

문자열을 일 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 일을 일 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 일이 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 일 부분을 포함해야 합니다.
  • format_string_expression: 일 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 일 부분을 포함합니다.

  • DATE
  • DATETIME
  • TIMESTAMP

DAY 부분이 string_expression에 누락되었고 반환 유형이 이 부분을 포함하면 DAY1로 설정됩니다.

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
DD 2자리 숫자와 일치합니다. 일 부분을 일치하는 숫자로 설정합니다. MONTH DD, YYYY의 입력: 'DECEMBER 03, 2018'
DATE로 출력: 2018-12-03

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • DATE
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('DECEMBER 03, 2018' AS DATE FORMAT 'MONTH DD, YYYY') AS string_to_date

+----------------+
| string_to_date |
+----------------+
| 2018-12-03     |
+----------------+

문자열을 시간 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 시간을 시간 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 시간이 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 시간 부분을 포함해야 합니다.
  • format_string_expression: 시간 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 시간 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

HOUR 부분이 string_expression에 누락되었고 반환 유형이 이 부분을 포함하면 HOUR0으로 설정됩니다.

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
HH 2자리 숫자와 일치합니다. 일치하는 숫자인 n12이면 temp = 0을 설정하고, 그렇지 않으면 temp = n을 설정합니다. A.M./P.M. 형식 요소의 일치하는 값이 P.M.이면 temp = n + 12을 설정합니다. 시간 부분을 temp로 설정합니다. HH가 있으면 형식 모델에 자오선 표시가 있어야 합니다. HH:MI P.M.의 입력: '03:30 P.M.'
TIME으로 출력: 15:30:00
HH12 HH와 동일한 동작입니다.
HH24 2자리 숫자와 일치합니다. 시간 부분을 일치하는 숫자로 설정합니다. HH24:MI의 입력: '15:30'
TIME으로 출력: 15:30:00

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • TIME
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('15:30' AS TIME FORMAT 'HH24:MI') AS string_to_date_time

+---------------------+
| string_to_date_time |
+---------------------+
| 15:30:00            |
+---------------------+

문자열을 분 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 분을 분 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 분이 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 분 부분을 포함해야 합니다.
  • format_string_expression: 분 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 분 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

MINUTE 부분이 string_expression에 누락되었고 반환 유형이 이 부분을 포함하면 MINUTE0으로 설정됩니다.

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
MI 2자리 숫자와 일치합니다. 분 부분을 일치하는 숫자로 설정합니다. HH:MI P.M.의 입력: '03:30 P.M.'
TIME으로 출력: 15:30:00

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • TIME
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('03:30 P.M.' AS TIME FORMAT 'HH:MI P.M.') AS string_to_date_time

+---------------------+
| string_to_date_time |
+---------------------+
| 15:30:00            |
+---------------------+

문자열을 초 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 초를 초 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 초가 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 초 부분을 포함해야 합니다.
  • format_string_expression: 초 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 초 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

SECOND 부분이 string_expression에 누락되었고 반환 유형이 이 부분을 포함하면 SECOND0으로 설정됩니다.

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
SS 2자리 숫자와 일치합니다. 초 부분을 일치하는 숫자로 설정합니다. HH:MI:SS P.M.의 입력: '03:30:02 P.M.'
TIME으로 출력: 15:30:02
SSSSS 5자리 숫자와 일치합니다. 일치하는 숫자를 자정 이후 경과된 초 수로 해석하여 시간, 분, 초 부분을 설정합니다. SSSSS의 입력: '03723'
TIME으로 출력: 01:02:03
FFn n 자리 수와 일치합니다. 여기서 n은 형식 요소에서 FF 다음의 숫자입니다. 초 부분의 소수점 이하 부분을 일치하는 숫자로 설정합니다. HH24:MI:SS.FF1의 입력: '01:05:07.16'
TIME으로 출력: 01:05:07.2
HH24:MI:SS.FF2의 입력: '01:05:07.16'
TIME으로 출력: 01:05:07.16
HH24:MI:SS.FF3의 입력: 'FF3: 01:05:07.16'
TIME으로 출력: 01:05:07.160

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • TIME
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('01:05:07.16' AS TIME FORMAT 'HH24:MI:SS.FF1') AS string_to_date_time

+---------------------+
| string_to_date_time |
+---------------------+
| 01:05:07.2          |
+---------------------+

문자열을 자오선 표시 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 자오선 표시를 자오선 표시 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 자오선 표시가 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 자오선 표시 부분을 포함해야 합니다.
  • format_string_expression: 자오선 표시 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 자오선 표시 부분을 포함합니다.

  • TIME
  • DATETIME
  • TIMESTAMP

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
A.M. 또는 P.M. 정규 표현식 '(A|P)\.M\.'을 사용하여 일치합니다. HH:MI A.M.의 입력: '03:30 A.M.'
TIME으로 출력: 03:30:00
HH:MI P.M.의 입력: '03:30 P.M.'
TIME으로 출력: 15:30:00
HH:MI P.M.의 입력: '03:30 A.M.'
TIME으로 출력: 03:30:00
HH:MI A.M.의 입력: '03:30 P.M.'
TIME으로 출력: 15:30:00
HH:MI a.m.의 입력: '03:30 a.m.'
TIME으로 출력: 03:30:00

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • TIME
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('03:30 P.M.' AS TIME FORMAT 'HH:MI A.M.') AS string_to_date_time

+---------------------+
| string_to_date_time |
+---------------------+
| 15:30:00            |
+---------------------+

문자열을 시간대 부분 형식으로 지정

CAST(string_expression AS type FORMAT format_string_expression)

문자열 형식으로 지정된 시간대를 시간대 부분이 포함된 데이터 유형으로 Cast 변환합니다. Cast 변환 수행 방법에 대한 안내를 제공하는 형식 요소를 포함합니다.

  • string_expression: 이 표현식은 형식을 지정하려는 시간대가 있는 문자열을 포함합니다.
  • type: Cast 변환 중인 데이터 유형입니다. 시간대 부분을 포함해야 합니다.
  • format_string_expression: 시간대 형식 요소가 있는 형식 요소를 포함하는 문자열입니다. 이 문자열의 형식 요소는 총체적으로 형식 모델로 정의되며 해당 규칙을 따라야 합니다.

다음 데이터 유형은 시간대 부분을 포함합니다.

  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

지원되는 형식 요소가 아닌 값이 format_string_expression 또는 string_expression에 표시되고 형식 요소로 지정된 값을 포함하지 않으면 오류가 발생합니다.

형식 요소 반환 예시
TZH 정규 표현식 '(\+|\-| )[0-9]{2}'을 사용하여 일치합니다. 시간대 및 시간 부분을 일치하는 부호 및 숫자로 설정합니다. 시간대 부호를 일치하는 문자열의 첫 글자로 설정합니다. 숫자 2는 비일치 검색의 경우 최대 2자리까지의 숫자 일치 그리고 일치 검색의 경우 정확히 2자리 숫자로의 일치를 의미합니다. YYYY-MM-DD HH:MI:SSTZH의 입력: '2008-12-25 05:30:00-08'
TIMESTAMP로 출력: 2008-12-25 05:30:00-08
TZM 2자리 숫자와 일치합니다. n을 일치하는 숫자로 둡니다. 시간대 부호가 마이너스 부호이면 시간대 분 부분을 -n으로 설정합니다. 그렇지 않으면 시간대 분 부분을 n으로 설정합니다. YYYY-MM-DD HH:MI:SSTZH의 입력: '2008-12-25 05:30:00+05.30'
TIMESTAMP로 출력: 2008-12-25 05:30:00+05.30

반환 유형

문자열이 Cast 변환된 데이터 유형입니다. 다음 중 하나일 수 있습니다.

  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

예시

SELECT CAST('2020.06.03 00:00:53+00' AS TIMESTAMP FORMAT 'YYYY.MM.DD HH:MI:SSTZH') AS string_to_date_time

+-----------------------------+
| as_timestamp                |
+-----------------------------+
| 2020-06-03 00:00:53.110 UTC |
+-----------------------------+

문자열을 리터럴 형식으로 지정

CAST(string_expression AS data_type FORMAT format_string_expression)
형식 요소 반환 예시
- 출력은 입력과 동일합니다.
. 출력은 입력과 동일합니다. .
/ 출력은 입력과 동일합니다. /
, 출력은 입력과 동일합니다. ,
' 출력은 입력과 동일합니다. '
; 출력은 입력과 동일합니다. ;
: 출력은 입력과 동일합니다. :
공백 형식 모델에서 하나 이상의 공간의 연속 시퀀스가 입력에 있는 하나 이상의 연속된 유니코드 공백 문자와 일치합니다. 공백은 ASCII 32 공백 문자입니다. 탭 또는 줄바꿈과 같은 일반적인 공백을 의미하지 않습니다. 형식 모델에서 ASCII 32 문자가 아닌 모든 공백 문자는 오류를 일으킵니다.
"텍스트" 이 정규 표현식을 사용하여 형식 지정의 형식 요소로 생성된 출력입니다. s는 문자열 입력 regex.escape(s)를 나타냅니다. 입력: "abc"
출력: abc
입력: "a\"b\\c"
출력: a"b\c

숫자 유형을 문자열 형식으로 지정

CAST(numeric_expression AS STRING FORMAT format_string_expression)

다음 형식 요소를 조합하여 숫자 유형을 문자열로 Cast 변환할 수 있습니다.

지수 형식 요소(EEEE)를 제외하고 모든 형식 요소는 출력에서 고정된 문자 수를 생성하며, 출력은 소수점으로 정렬됩니다. 첫 번째 문자는 음수의 경우 -를 출력합니다. 그렇지 않은 경우 공백입니다. 빈 문자와 후행 0을 숨기려면 FM 플래그를 사용합니다.

반환 유형

STRING

예시

SELECT input, CAST(input AS STRING FORMAT '$999,999.999') AS output
FROM UNNEST([1.2, 12.3, 123.456, 1234.56, -12345.678, 1234567.89]) AS input

+------------+---------------+
|   input    |    output     |
+------------+---------------+
|        1.2 |        $1.200 |
|       12.3 |       $12.300 |
|    123.456 |      $123.456 |
|    1234.56 |    $1,234.560 |
| -12345.678 |  -$12,345.678 |
| 1234567.89 |  $###,###.### |
+------------+---------------+

숫자를 문자열 형식으로 지정

다음 형식 요소는 숫자를 출력합니다. 입력을 나타내기 위한 숫자 형식 요소가 충분하지 않으면 모든 숫자 형식 요소가 출력에서 #으로 바뀝니다.

형식 요소 반환 예시
0 10진수. 선행 및 후행 0이 포함됩니다. 입력: 12
형식: '000'
출력: ' 012'
입력: 12
형식: '000.000'
출력: ' 012.000'
입력: -12
형식: '000.000'
출력: '-012.000'
9 10진수. 선행 0은 공백으로 바뀝니다. 후행 0이 포함됩니다. 입력: 12
형식: '999'
출력: '  12'
입력: 12
형식: '999.999'
출력: '  12.000'
X 또는 x

16진수 숫자입니다. 0, FM, 부호 형식 요소를 제외하고 다른 형식 요소와 함께 표시될 수 없습니다. 형식 문자열의 최대 16진수 수는 16입니다.

X는 대문자를 생성하고 X는 소문자를 생성합니다.

0이 16진수 형식 요소와 조합된 경우 0으로 생성되는 문자는 다음 X 또는 x 요소의 대소문자와 일치합니다. 후속 X 또는 x가 없으면 0이 대문자를 생성합니다.

입력: 43981
형식: 'XXXX'
출력: ' ABCD'
입력: 43981
형식: 'xxxx'
출력: ' abcd'
입력: 43981
형식: '0X0x'
출력: ' ABcd'
입력: 43981
형식: '0000000X'
출력: ' 0000ABCD'

반환 유형

STRING

예시

SELECT
  CAST(12 AS STRING FORMAT '999') as a,
  CAST(-12 AS STRING FORMAT '999') as b;

+------+------+
|  a   |  b   |
+------+------+
|   12 |  -12 |
+------+------+

소수점을 문자열 형식으로 지정

다음 형식 요소는 소수점을 출력합니다. 이러한 형식 요소는 상호 배타적입니다. 형식 문자열에 최대 하나만 표시될 수 있습니다.

형식 요소 반환 예시
.(마침표) 소수점. 입력: 123.58
형식: '999.999'
출력: ' 123.580'
D 현재 언어의 소수점입니다. 입력: 123.58
형식: '999D999'
출력: ' 123.580'

반환 유형

STRING

예시

SELECT CAST(12.5 AS STRING FORMAT '99.99') as a;

+--------+
|   a    |
+--------+
|  12.50 |
+--------+

부호를 문자열 형식으로 지정

다음 형식 요소는 부호(+/-)를 출력합니다. 이러한 형식 요소는 상호 배타적입니다. 형식 문자열에 최대 하나만 표시될 수 있습니다.

부호 형식 요소가 없으면 부호에 대해 하나의 추가 공간이 예약됩니다. 예를 들어 입력이 12이고 형식 문자열이 '99'이면 세 글자 길이의 ' 12'가 출력됩니다.

부호는 숫자 앞에 표시됩니다. 형식 모델에 통화 기호 요소가 포함된 경우 부호가 통화 기호 앞에 표시됩니다.

형식 요소 반환 예시
S 명시적 부호입니다. 양수의 경우 +가 출력되고 음수의 경우 -가 출력됩니다. 출력에서 위치는 숫자에 고정됩니다. 입력: -12
형식: 'S9999'
출력: '  -12'
입력: -12
형식: '9999S'
출력: '  12-'
MI 명시적 부호입니다. 양수의 경우 공백이, 음수의 경우 -가 출력됩니다. 이 요소는 마지막 위치에만 표시될 수 있습니다. 입력: 12
형식: '9999MI'
출력: '  12 '
입력: -12
형식: '9999MI'
출력: '  12-'
PR 음수의 경우 값이 화살괄호로 묶입니다. 양수의 경우 선행 및 후행 공백과 함께 값이 반환됩니다. 이 요소는 마지막 위치에만 표시될 수 있습니다. 입력: 12
형식: '9999PR'
출력: '   12 '
입력: -12
형식: '9999PR'
출력: '  <12>'

반환 유형

STRING

예시

SELECT
  CAST(12 AS STRING FORMAT 'S99') as a,
  CAST(-12 AS STRING FORMAT 'S99') as b;

+-----+-----+
|  a  |  b  |
+-----+-----+
| +12 | -12 |
+-----+-----+

통화 기호를 문자열 형식으로 지정

다음 형식 요소는 통화 기호를 출력합니다. 이러한 형식 요소는 상호 배타적입니다. 형식 문자열에 최대 하나만 표시될 수 있습니다. 출력에서 통화 기호는 처음 숫자 또는 소수점 앞에 표시됩니다.

형식 요소 반환 예시
$ 달러 기호($)입니다. 입력: -12
형식: '$999'
출력: ' -$12'
C 또는 c 현재 언어의 ISO-4217 통화 코드입니다. 입력: -12
형식: 'C999'
출력: ' -USD12'
입력: -12
형식: 'c999'
출력: ' -usd12'
L 현재 언어의 통화 기호입니다. 입력: -12
형식: 'L999'
출력: ' -$12'

반환 유형

STRING

예시

SELECT
  CAST(12 AS STRING FORMAT '$99') as a,
  CAST(-12 AS STRING FORMAT '$99') as b;

+------+------+
|  a   |  b   |
+------+------+
|  $12 | -$12 |
+------+------+

그룹 분리 문자를 문자열 형식으로 지정

다음 형식 요소는 그룹 분리 문자를 출력합니다.

형식 요소 반환 예시
,(쉼표) 그룹 분리 문자입니다. 입력: 12345
형식: '999,999'
출력: '  12,345'
G 현재 언어의 그룹 분리 문자 지점입니다. 입력: 12345
형식: '999G999'
출력: '  12,345'

반환 유형

STRING

예시

SELECT CAST(1234 AS STRING FORMAT '999,999') as a;

+----------+
|    a     |
+----------+
|    1,234 |
+----------+

기타 숫자 형식 요소

형식 요소 반환 예시
B 정수 부분이 0이면 공백을 출력합니다. 숫자의 정수 부분이 0인 경우 숫자(9, X, 0), 소수점, 그룹 분리 문자, 통화, 부호, 지수의 형식 요소가 출력에 공백을 생성합니다. 입력: 0.23
형식: 'B99.999S'
출력: '       '
입력: 1.23
형식: 'B99.999S'
출력: ' 1.230+'
EEEE 값의 지수 부분을 과학적 표기법으로 출력합니다. 지수 값이 -99~99 사이이면 출력이 4자입니다. 그렇지 않으면 출력에 최소 자리 숫자가 사용됩니다. 입력: 20
형식: '9.99EEEE'
출력: ' 2.0E+01'
입력: 299792458
형식: 'S9.999EEEE'
출력: '+2.998E+08'
FM 출력에서 모든 공백 및 후행 0을 삭제합니다. 이 요소를 사용하여 다른 형식 요소로 생성된 후행 0 및 공백을 숨길 수 있습니다. 입력: 12.5
형식: '999999.000FM'
출력: '12.5'
RN 값을 가장 가까운 정수로 반올림한 로마 숫자로 반환합니다. 입력은 1~3999 사이여야 합니다. 15자 길이로 왼쪽에 공백이 채워진 상태로 출력됩니다. 이 요소는 FM을 제외하고 다른 형식 요소와 함께 사용될 수 없습니다. 입력: 2021
형식: 'RN'
출력: '          MMXXI'
V 입력 값에 10^n을 곱합니다. 여기서 n은 V 다음 9s의 숫자입니다. 이 요소는 소수점 또는 지수 형식 요소와 함께 사용될 수 없습니다. 입력: 23.5
형식: 'S000V00'
출력: '+02350'

반환 유형

STRING

예시

SELECT CAST(-123456 AS STRING FORMAT '9.999EEEE') as a;"

+------------+
|     a      |
+------------+
| -1.235E+05 |
+------------+

BASE 인코딩 정보

BASE 인코딩은 문자열 형식의 바이너리 데이터를 radix-X 표현으로 변환합니다.

X가 2, 8, 16이면 아라비아 숫자 0~9와 라틴 문자 a~z가 인코딩된 문자열에 사용됩니다. 예를 들어 BASE16/16진수 인코딩 결과에 0~9 및 a~f가 포함됩니다.

X가 32 또는 64이면 기본 문자 테이블이 rfc 4648에 정의됩니다. X가 2, 8, 16인 BASE 문자열을 디코딩하면 입력 문자열의 라틴 문자가 대소문자를 구분하지 않습니다. 예를 들어 '3a' 및 '3A' 모두 BASE16/16진수 디코딩에 유효한 입력 문자열이며, 동일한 결과를 출력합니다.

수학 함수

모든 수학 함수는 다음과 같이 동작합니다.

  • 입력 매개변수 중 하나가 NULL인 경우 NULL을 반환합니다.
  • 인수 중 하나가 NaN인 경우 NaN을 반환합니다.

ABS

ABS(X)

설명

절대값을 계산합니다. 인수가 정수이고 출력값을 동일한 유형으로 나타낼 수 없는 경우 오류를 반환합니다. 양의 표현이 없는 최대 음의 입력값의 경우에만 이 오류가 발생합니다.

X ABS(X)
25 25
-25 25
+inf +inf
-inf +inf

반환 데이터 유형

입력INT64NUMERICBIGNUMERICFLOAT64
출력INT64NUMERICBIGNUMERICFLOAT64

SIGN

SIGN(X)

설명

음의 인수, 0, 양의 인수에 각각 -1, 0, +1을 반환합니다. 이 함수는 부동 소수점 인수의 양의 0과 음의 0을 구별하지 않습니다.

X SIGN(X)
25 +1
0 0
-25 -1
NaN NaN

반환 데이터 유형

입력INT64NUMERICBIGNUMERICFLOAT64
출력INT64NUMERICBIGNUMERICFLOAT64

IS_INF

IS_INF(X)

설명

값이 양의 무한대이거나 음의 무한대이면 TRUE를 반환합니다.

X IS_INF(X)</