cast 기능

적용 대상:체크 표시된 예 Databricks SQL 체크 표시된 예 Databricks Runtime

expr을 대상 데이터 형식 type으로 캐스트합니다. 이 연산자는 (콜론 콜론 기호) 연산자의 동의어::입니다.

구문

cast(sourceExpr AS targetType)

논쟁

  • sourceExpr: 캐스팅 가능한 모든 식입니다.
  • targetType: 결과의 데이터 형식입니다.

반품

결과는 형식 targetType입니다.

다음과 같은 데이터 형식 캐스팅 조합이 유효합니다.

원본(행) 대상(열) 무효 숫자 문자열 날짜 타임 스탬프 TIMESTAMP_NTZ 연도-월 간격 일 시간 간격 부울 바이너리 배열 지도 구조체 변형 객체
무효 Y Y Y Y Y Y Y Y Y Y Y Y Y Y N
숫자 N Y Y N Y N Y Y Y N N N N Y N
문자열 N Y Y Y Y Y Y Y Y Y N N N Y N
날짜 N N Y Y Y Y N N N N N N N Y N
타임 스탬프 N Y Y Y Y Y N N N N N N N Y N
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N Y N
연도-월 간격 N Y Y N N N Y N N N N N N N N
일 시간 간격 N Y Y N N N N Y N N N N N N N
부울 N Y Y N Y N N N Y N N N N Y N
바이너리 N Y Y N N N N N N Y N N N Y N
배열 N N Y N N N N N N N Y N N Y N
지도 N N Y N N N N N N N N Y N N N
구조체 N N Y N N N N N N N N N Y N N
변형 N Y Y Y Y Y N N Y Y Y Y Y Y N
객체 N N N N N N N N N N N Y Y N N

일반적인 오류 조건

targetType 기반 규칙 및 제한 사항

경고

Databricks Runtime에서 spark.sql.ansi.enabledfalse이면 오버플로로 인해 오류가 발생하지 않고 대신 결과를 "래핑"합니다.

sourceExpr에 대한 형식이 잘못되었거나 잘못된 문자가 있는 targetType 값은 NULL이(가) 됩니다.

숫자

targetType이(가) 숫자이고 sourceExpr이(가) 다음 형식인 경우:

  • 무효

    결과는 지정된 숫자 형식의 결과입니다 NULL .

  • 숫자

    정수targetType정수형 수라면, 결과는 sourceExpr정수로 절단됩니다.

    그렇지 않으면 결과는 sourceExpr사용 가능한 범위에 맞추어 반올림됩니다.

    값이 targetType 범위를 벗어나면 Azure Databricks CAST_OVERFLOW 발생합니다.

    try_cast를 사용하여 오버플로 오류를 NULL(으)로 바꿉니다.

  • 문자열

    sourceExpr은(는) targetType의 리터럴 값으로 읽혀집니다.

    sourceExpr 리터럴 값의 형식을 준수하지 않으면 Azure Databricks CAST_INVALID_INPUT 발생합니다.

    값이 targetType 범위를 벗어나면 Azure Databricks CAST_OVERFLOW 발생합니다.

    try_cast를 사용하여 오버플로 및 잘못된 형식 오류를 NULL(으)로 바꿉니다.

  • 타임 스탬프

    결과는 1970-01-01 00:00:00 UTCsourceExpr 사이에 경과된 시간(초)입니다.

    targetType이(가) 정수 숫자인 경우 결과는 정수로 잘립니다.

    그렇지 않으면 결과가 사용 가능한 배율에 맞게 반올림됩니다.

    결과가 targetType 범위를 벗어나면 Azure Databricks CAST_OVERFLOW 발생합니다.

    try_cast를 사용하여 오버플로 오류를 NULL(으)로 바꿉니다.

  • 간격

    적용 대상:예로 표시됨 Databricks SQL 예로 표시됨 Databricks Runtime 11.3 LTS 이상

    대상 형식은 정확한 숫자여야 합니다.

    INTERVAL upper_unit TO lower_unit이 지정되면 결과는 lower_unit의 총 횟수로 측정됩니다. lower_unitSECOND이면 소수 자릿수 초는 소수점 오른쪽에 저장됩니다. 다른 모든 간격의 경우 결과는 항상 정수입니다.

  • 불리언

    sourceExpr가 다음과 같은 경우:

    • true: 결과는 1입니다.
    • false: 결과는 0입니다.
    • NULL: 결과는 NULL입니다.
  • 변형

    VARIANT 형식의 실제 값 유형 규칙이 적용됩니다.

예제

> SELECT cast(NULL AS INT);
  NULL

> SELECT cast(5.6 AS INT);
  5

> SELECT cast(5.6 AS DECIMAL(2, 0));
  6

> SELECT cast(-5.6 AS INT);
  -5

> SELECT cast(-5.6 AS DECIMAL(2, 0));
  -6

> SELECT cast(128 AS TINYINT);
  Error: CAST_OVERFLOW

> SELECT cast(128 AS DECIMAL(2, 0));
  Error: CAST_OVERFLOW

> SELECT cast('123' AS INT);
  123

> SELECT cast('123.0' AS INT);
  Error: CAST_INVALID_INPUT

> SELECT cast(TIMESTAMP'1970-01-01 00:00:01' AS LONG);
  1

> SELECT cast(TIMESTAMP'1970-01-01 00:00:00.000001' AS DOUBLE);
  1.0E-6

> SELECT cast(TIMESTAMP'2022-02-01 00:00:00' AS SMALLINT);
  Error: CAST_OVERFLOW
> SELECT cast(true AS BOOLEAN);
  1

> SELECT cast(INTERVAL '1-2' YEAR TO MONTH AS INTEGER);
  14

> SELECT cast(INTERVAL '1:30.5' MINUTE TO SECOND AS DECIMAL(5, 2));
  90.50

> SELECT cast(TRUE AS INT);
  1

> SELECT cast(FALSE AS INT);
  0

> SELECT cast('15'::VARIANT AS INT);
  15

스트링

sourceExprSTRING인 경우, 결과 STRINGsourceExpr의 데이터 정렬을 상속합니다. 다른 모든 경우에 결과 STRING의 정렬은 기본 정렬입니다.

데이터 정렬을 변경하려면 데이터 정렬 식을 추가합니다.

targetType STRING 형식이고 sourceExpr 형식인 경우:

  • 무효

    결과는 문자열입니다 NULL .

  • 정확한 수치

    결과는 선택적 빼기 기호가 있는 리터럴 번호이고 소수점 왼쪽의 한 숫자를 제외하고 선행 0이 없습니다. targetType이(가) DECIMAL(p, s)이고 s이(가) 0보다 더 큰 경우 소수점이 추가되고 후행 0이 척도에 맞게 추가됩니다.

  • 부동 소수점 이진수

    절대 숫자가 10,000,000보다 작고 0.001보다 크거나 같으면 결과는 소수점 양쪽에 하나 이상의 숫자를 가진 과학적 표기법 없이 표현됩니다.

    그렇지 않으면 Azure Databricks E 및 지수를 사용합니다. 매니티사에는 선택적 선행 빼기 기호와 소수점 왼쪽의 한 자리, 오른쪽에 0보다 큰 최소 자릿수가 있습니다. 지수에는 선택 사항인 앞에 오는 빼기 기호가 있습니다.

  • 날짜

    연도가 기원전 9999년부터 서기 9999년까지인 경우 각각 -YYYY-MM-DD 형식의 YYYY-MM-DD이 결과로 제공됩니다.

    이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고 +은(는) CE에 사용됩니다.

  • 타임 스탬프

    연도가 기원전 9999년에서 기원후 9999년 사이인 경우, 결과는 각각 형식 -YYYY-MM-DD hh:mm:ssYYYY-MM-DD hh:mm:ss입니다.

    이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고 +은(는) CE에 사용됩니다.

    필요한 경우 소수 자릿수 초(.f...)가 추가됩니다.

  • TIMESTAMP_NTZ

    연도가 기원전 9999년에서 기원후 9999년 사이인 경우, 결과는 각각 형식 -YYYY-MM-DD hh:mm:ssYYYY-MM-DD hh:mm:ss입니다.

    이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고 +은(는) CE에 사용됩니다.

    필요한 경우 소수 자릿수 초(.f...)가 추가됩니다.

  • 연도-월 간격

    결과는 간격 리터럴의 가장 짧은 표현입니다. 간격이 음수이면 기호가 interval-string에 포함됩니다. 10보다 작은 단위의 경우 선행 0은 생략됩니다.

    일반적인 연도별 간격 문자열에는 다음과 같은 형식이 있습니다.

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • 일 시간 간격

    결과는 간격 리터럴의 가장 짧은 표현입니다. 간격이 음수이면 기호가 interval-string에 포함됩니다. 10보다 작은 단위의 경우 선행 0은 생략됩니다.

    일반적인 일 시간 간격 문자열에는 다음과 같은 형식이 있습니다.

    • INTERVAL 'D' DAY
    • INTERVAL 'D h' DAY TO HOUR
    • INTERVAL 'D h:m' DAY TO MINUTE
    • INTERVAL 'D h:m:s' DAY TO SECOND
    • INTERVAL 'h' HOUR
    • INTERVAL 'h:m' HOUR TO MINUTE
    • INTERVAL 'm:s' MINUTE TO SECOND
    • INTERVAL 's' SECOND
  • 불리언

    부울true의 결과는 리터럴 STRINGtrue입니다. false의 경우 문자열 리터럴false입니다. NULL NULL 문자열입니다.

  • 바이너리

    결과는 UTF-8 문자 시퀀스로 해석되는 sourceExpr 이진입니다.

    Azure Databricks UTF-8 문자의 유효성을 검사하지 않습니다. BINARY에서 STRING(으)로 캐스팅하면 대체 문자를 삽입하거나 오류를 발생하지 않습니다.

  • 배열

    결과는 대괄호([ ])로 묶인 캐스트 요소의 쉼표로 구분된 목록입니다. 각 쉼표 뒤에 하나의 공백이 있습니다. NULL 요소가 null 리터럴로 변환됩니다.

    Azure Databricks 대괄호 또는 쉼표를 포함할 수 있는 개별 요소를 인용하거나 표시하지 않습니다.

  • 지도

    결과는 쉼표로 구분된 캐스트 키 값 쌍 목록이며, 중괄호로 묶여 있습니다{ }. 각 쉼표 뒤에 하나의 공백이 있습니다. 각 키 값 쌍은 ->로 구분됩니다. NULL 매핑 값은 null 리터럴로 변환됩니다.

    Azure Databricks 개별 키 또는 값을 인용하거나 표시하지 않습니다. 이 키에는 중괄호, 쉼표 또는 -> 포함될 수 있습니다.

  • 구조체

    결과는 쉼표로 구분된 캐스트 필드 값 목록이며, 중괄호로 묶여 있습니다 { }. 각 쉼표 뒤에 하나의 공백이 있습니다. NULL 필드 값은 null 리터럴로 변환됩니다.

    Azure Databricks 개별 필드 값을 인용하거나 표시하지 않습니다. 개별 필드 값에는 중괄호 또는 쉼표가 포함될 수 있습니다.

  • 변형

    VARIANT 형식의 실제 값 유형 규칙이 적용됩니다.

예제

> SELECT cast(NULL AS STRING);
  NULL

> SELECT cast(-3Y AS STRING);
  -3

> SELECT cast(5::DECIMAL(10, 5) AS STRING);
  5.00000

> SELECT cast(12345678e-4 AS STRING);
  1234.5678

> SELECT cast(1e7 as string);
  1.0E7

> SELECT cast(1e6 as string);
  1000000.0

> SELECT cast(1e-4 as string);
  1.0E-4

> SELECT cast(1e-3 as string);
  0.001

> SELECT cast(12345678e7 AS STRING);
  1.2345678E14

> SELECT cast(DATE'1900-12-31' AS STRING);
  1900-12-31

-- Caesar no more
> SELECT cast(DATE'-0044-03-15' AS STRING);
  -0044-03-15

> SELECT cast(DATE'100000-12-31' AS STRING);
  +100000-12-31

> SELECT cast(current_timestamp() AS STRING);
  2022-04-02 22:29:09.783

> SELECT cast(TIMESTAMP_NTZ'2023-01-01' AS STRING);
  2023-01-01 00:00:00

> SELECT cast(INTERVAL -'13-02' YEAR TO MONTH AS STRING);
  INTERVAL '-13-2' YEAR TO MONTH

> SELECT cast(INTERVAL '12:04.9900' MINUTE TO SECOND AS STRING);
  INTERVAL '12:04.99' MINUTE TO SECOND

> SELECT cast(true AS STRING);
  true

> SELECT cast(false AS STRING);
  false

-- A bad UTF-8 string
> SELECT cast(x'33800033' AS STRING);
  3�3

> SELECT hex(cast(x'33800033' AS STRING));
  33800033

> SELECT cast(array('hello', NULL, 'world') AS STRING);
  [hello, null, world]

> SELECT cast(array('hello', 'wor, ld') AS STRING);
  [hello, wor, ld]

> SELECT cast(array() AS STRING);
  []

> SELECT cast(map('hello', 1, 'world', null) AS STRING);
  {hello -> 1, world -> null}

> SELECT cast(map('hello -> 1', DATE'2022-01-01') AS STRING);
  {hello -> 1 -> 2022-01-01}

> SELECT cast(map() AS STRING);
  {}

> SELECT cast(named_struct('a', 5, 'b', 6, 'c', NULL) AS STRING);
  {5, 6, null}

> SELECT cast(named_struct() AS STRING);
  {}

> SELECT cast(DATE'2024-01-05'::VARIANT AS STRING);
  2024-01-05

> SELECT cast(5 AS STRING) COLLATE UNICODE;
  5

날짜

targetType DATE 형식이고 sourceExpr 형식인 경우:

  • 무효

    결과는 NULLDATE입니다.

  • 문자열

    sourceExpr는 유효한 dateString이어야 합니다.

    sourceExpr 유효한 dateString 아닌 경우 Azure Databricks CAST_INVALID_INPUT 발생합니다.

    try_cast를 사용하여 잘못된 데이터 오류를 NULL(으)로 바꿉니다.

  • 타임 스탬프

    결과는 sourceExpr 타임스탬프의 날짜 부분입니다.

  • TIMESTAMP_NTZ

    결과는 timestamp_ntz sourceExpr날짜 부분입니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

예제

> SELECT cast(NULL AS DATE);
  NULL

> SELECT cast('1900-10-01' AS DATE);
  1900-10-01

> SELECT cast('1900-10-01' AS DATE);
  1900-10-01

-- There is no February 30.
> SELECT cast('1900-02-30' AS DATE);
  Error: CAST_INVALID_INPUT

> SELECT cast(TIMESTAMP'1900-10-01 12:13:14' AS DATE);
  1900-10-01

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14' AS DATE);
  1900-10-01

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
  1900-10-01

타임 스탬프

targetType TIMESTAMP 형식이고 sourceExpr 형식인 경우:

  • 무효

    결과는 NULLDATE입니다.

  • 숫자

    sourceExpr은(는) 1970-01-01 00:00:00 UTC 이후의 초 수로 읽혀집니다.

    마이크로초보다 작은 시간 단위는 절단됩니다.

    값이 TIMESTAMP 범위를 벗어나면 Azure Databricks CAST_OVERFLOW 발생합니다.

    try_cast를 사용하여 오버플로 오류를 NULL(으)로 바꿉니다.

  • 문자열

    sourceExpr는 유효한 timestampString이어야 합니다.

    sourceExpr 유효한 timestampString 아닌 경우 Azure Databricks CAST_INVALID_INPUT 발생합니다.

    try_cast를 사용하여 잘못된 데이터 오류를 NULL(으)로 바꿉니다.

  • 날짜

    결과는 sourceExprDATE 시간 00:00:00단위입니다.

  • TIMESTAMP_NTZ

결과는 동일한 연도/월/일/시간/분/초 필드를 갖는 timestamp_ntz sourceExpr 타임스탬프 값입니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

예제

> SELECT cast(NULL AS TIMESTAMP);
  NULL

> SET TIME ZONE '+00:00';
> SELECT cast(0.0 AS TIMESTAMP);
  1970-01-01 00:00:00

> SELECT cast(0.0000009 AS TIMESTAMP);
  1970-01-01 00:00:00

> SELECT cast(1e20 AS TIMESTAMP);
  Error: CAST_OVERFLOW

> SELECT cast('1900' AS TIMESTAMP);
  1900-01-01 00:00:00

> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP);
  1900-10-01 12:13:14

> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP);
  Error: CAST_INVALID_INPUT

> SELECT cast(DATE'1900-10-01' AS TIMESTAMP);
  1900-10-01 00:00:00

> SELECT cast(TIMESTAMP_NTZ'2023-01-01 02:03:04.567' as TIMESTAMP)
  2023-01-01 02:03:04.567

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
  1900-10-01 00:00:00

TIMESTAMP_NTZ

targetType TIMESTAMP_NTZ 형식이고 sourceExpr 형식인 경우:

  • 무효

    결과는 NULLDATE입니다.

  • 문자열

    sourceExpr는 유효한 timestampString이어야 합니다.

    sourceExpr 유효한 timestampString 아닌 경우 Azure Databricks CAST_INVALID_INPUT 발생합니다.

    try_cast를 사용하여 잘못된 데이터 오류를 NULL(으)로 바꿉니다.

  • 날짜

    결과는 sourceExpr 시간 단위의 00:00:00 DATE입니다.

  • 타임 스탬프

    결과는 세션 시간대의 sourceExpr 지역 시간입니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

예제

> SELECT cast(NULL AS TIMESTAMP_NTZ);
  NULL

> SELECT cast('1900' AS TIMESTAMP_NTZ);
  1900-01-01 00:00:00

> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP_NTZ);
  1900-10-01 12:13:14

> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP_NTZ);
  Error: CAST_INVALID_INPUT

> SELECT cast(DATE'1900-10-01' AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28' as TIMESTAMP_NTZ);
  America/Los_Angeles 2021-07-01 08:43:28

> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28UTC+3' as TIMESTAMP_NTZ);
  America/Los_Angeles 2021-06-30 22:43:28

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

연-월 간격

targetType이(가) 년-월 간격이고 sourceExpr이(가) 다음 형식인 경우:

예제

> SELECT cast(NULL AS INTERVAL YEAR);
  NULL

> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-4' YEAR TO MONTH

> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
  Error: CAST_INVALID_INPUT

> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
  INTERVAL '16' MONTH

> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-2' YEAR TO MONTH

> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
  INTERVAL '1' YEAR

날짜-시간 간격

targetType이(가) 날짜-시간 간격이고 sourceExpr이(가) 다음 형식인 경우:

> SELECT cast(NULL AS INTERVAL HOUR);
  NULL

> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
  INTERVAL '1 04:23' DAY TO MINUTE

> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
  Error: CAST_INVALID_INPUT

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
  INTERVAL '1703' MINUTE

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
  INTERVAL '28' HOUR

> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
  INTERVAL '2:5.3' MINUTE TO SECOND

불리언

targetType이(가) BOOLEAN이고 sourceExpr이(가) 다음 형식인 경우:

  • 무효

    결과는 NULL 타입의 BOOLEAN입니다.

  • 숫자

    sourceExpr가 다음과 같은 경우:

    • 0: 결과는 false입니다.

      그렇지 않으면 결과는 true입니다.

  • 문자열

    sourcEexpr가 다음과 같다면 (대/소문자 구분하지 않음):

    • 'T', 'TRUE', 'Y', 'YES', or '1': 결과는 true입니다.
    • 'F', 'FALSE', 'N', 'NO', or '0': 결과는 false입니다.
    • NULL: 결과는 NULL입니다.

    그렇지 않으면 Azure Databricks CAST_INVALID_INPUT 발생합니다.

    try_cast를 사용하여 잘못된 데이터 오류를 NULL(으)로 바꿉니다.

  • 변형

    VARIANT 형식의 실제 값 유형 규칙이 적용됩니다.

예제

> SELECT cast(NULL AS BOOLEAN);
  NULL

> SELECT cast('T' AS BOOLEAN);
  true

> SELECT cast('True' AS BOOLEAN);
  true

> SELECT cast('1' AS BOOLEAN);
  true

> SELECT cast('0' AS BOOLEAN);
  false

> SELECT cast('n' AS BOOLEAN);
  false

> SELECT cast('on' AS BOOLEAN);
  Error: CAST_INVALID_INPUT

> SELECT cast(0 AS BOOLEAN);
  false

> SELECT cast(0.0E10 AS BOOLEAN);
  false

> SELECT cast(1 AS BOOLEAN);
  true

> SELECT cast(0.1 AS BOOLEAN);
  true

> SELECT cast('NaN'::FLOAT AS BOOLEAN);
  true

> SELECT cast(1::VARIANT AS BOOLEAN);
  true

이진법

targetType이(가) BINARY이고 sourceExpr이(가) 다음 형식인 경우:

  • 무효

    결과는 NULL 타입의 BINARY입니다.

  • 문자열

    결과는 surceExpr의 UTF-8 인코딩입니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

예제

> SELECT cast(NULL AS BINARY);
  NULL

> SELECT hex(cast('Spark SQL' AS BINARY));
  537061726B2053514C

> SELECT hex(cast('Oдesa' AS BINARY));
  4FD0B4657361

> SELECT hex(cast('Oдesa'::VARIANT AS BINARY));
  4FD0B4657361

배열

targetType이(가) ARRAY < targetElementType > 이며 sourceExpr이(가) 다음 형식인 경우:

  • 무효

    결과는 NULLtargeType 결과입니다.

  • ARRAY < sourceElementType >

    sourceElementType에서 targetElementType(으)로의 캐스팅이 지원되는 경우 결과는 모든 요소가 ARRAY<targetElementType>(으)로 캐스팅된 targetElementType입니다.

    Azure Databricks 캐스트가 지원되지 않거나 요소를 캐스팅할 수 없는 경우 오류가 발생합니다.

    try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를 NULL(으)로 바꿉니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

예제

> SELECT cast(NULL AS ARRAY<INT>);
  NULL

> SELECT cast(array('t', 'f', NULL) AS ARRAY<BOOLEAN>);
  [true, false, NULL]

> SELECT cast(array('t', 'f', NULL) AS INTERVAL YEAR);
  Error: DATATYPE_MISMATCH

> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
  Error: CAST_INVALID_INPUT

> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
  [true, false, NULL]

지도

targetType이(가) MAP <targetKeyType, targetValueType>이며 sourceExpr이(가) 다음 형식인 경우:

  • 무효

    결과는 NULLtargetType 결과입니다.

  • MAP <sourceKeyType, sourceValueType >

    sourceKeyType에서 targetKeyType(으)로 그리고 sourceValueType에서 targetValueType(으)로의 캐스팅이 지원되는 경우 결과는 모든 키가 MAP<targetKeyType, targetValueType>(으)로 캐스팅되고 모든 값이 targetKeyType(으)로 캐스팅되는 targetValueType입니다.

    Azure Databricks 캐스트가 지원되지 않거나 키 또는 값을 캐스팅할 수 없는 경우 오류가 발생합니다.

    try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를 NULL(으)로 바꿉니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

  • OBJECT < [sourceFieldName: sourceFieldType [, ...]] >

    sourceFieldName의 형식 STRINGtargetKeyType로 캐스팅되어 맵 키에 매핑됩니다. 각 원본 필드 값 sourceFieldType 은 각각에 맞는 맵 값으로 형변환 targetValueType 되고 매핑됩니다.

    Azure Databricks 캐스트가 지원되지 않거나 필드 값이나 키 값을 캐스팅할 수 없는 경우 오류가 발생합니다.

    try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를 NULL(으)로 바꿉니다.

예제

> SELECT cast(NULL AS MAP<STRING, INT>);
  NULL

> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, BOOLEAN>);
  {10 -> true, 15 -> false, 20 -> null}

> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, ARRAY<INT>>);
  Error: DATATYPE_MISMATCH

> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
  Error: CAST_INVALID_INPUT

-- Casting an OBJECT to a MAP
> SELECT schema_of_variant(parse_json('{"cars": 12, "bicycles": 5 }'));
  OBJECT<bicycles: BIGINT, cars: BIGINT>
> SELECT CAST(parse_json('{"cars": 12, "bicycles": 5 }') AS MAP<STRING, INTEGER>);
  {bicycles -> 5, cars -> 12}

구조

targetType이(가) STRUCT < [targetFieldName:targetFieldType [NOT NULL][COMMENT str][, …]] >이고 sourceExpr이(가) 다음 형식인 경우:

  • 무효

    결과는 NULLtargetType 결과입니다.

  • STRUCT < [sourceFieldName:sourceFieldType [NOT NULL][COMMENT str][, …]] >

    모든 이러한 조건이 true인 경우에만, sourceExprtargetType로 캐스팅할 수 있습니다.

    • 원본 형식의 필드 수가 대상과 같습니다.
    • 모든 필드의 경우: sourceFieldTypeN을(를) targetFieldTypeN(으)로 캐스팅할 수 있습니다.
    • 모든 필드 값의 경우: 원본 필드 값 N을 targetFieldTypeN로 캐스팅할 수 있으며, 대상 필드 N이 NOT NULL로 표시된 경우 값이 null이 아닙니다.

    sourceFieldName, 원본 NOT NULL 제약 조건 및 COMMENT원본은 targetType와(과) 일치하지 않아도 되며 무시됩니다.

    Azure Databricks 캐스트가 지원되지 않거나 필드를 캐스팅할 수 없는 경우 오류가 발생합니다.

    try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를 NULL(으)로 바꿉니다.

  • 변형

    실제 값을 보유하는 데이터 형식에 대한 형식 규칙이 VARIANT에 적용됩니다.

  • OBJECT < [sourceFieldName: sourceFieldType [, ...]] >

    모든 sourceFieldNames가 sourceFieldNames와 일치합니다. 각 원본 필드 값 sourceFieldType 은 일치하는 값으로 캐스팅되고 targetValueType 해당 맵 값에 매핑됩니다.

    targetFieldName 일치하는 항목이 없으면 필드 값은 NULL입니다.

    sourceFieldName 일치하는 항목이 없으면 필드가 무시됩니다.

    Azure Databricks 캐스트가 지원되지 않거나 필드 값이나 키 값을 캐스팅할 수 없는 경우 오류가 발생합니다.

    try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를 NULL(으)로 바꿉니다.

예제

> SELECT cast(NULL AS STRUCT<a:INT>);
  NULL

> SELECT cast(named_struct('a', 't', 'b', '1900-01-01') AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  {"b":true,"c":1900-01-01}

> SELECT cast(named_struct('a', 't', 'b', NULL::DATE) AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  Error: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
  Error: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
  Error: CAST_INVALID_INPUT

> SELECT cast(named_struct('a', 't', 'b', '1900-01-01')::VARIANT AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  {"b":true,"c":1900-01-01}

-- Casting an OBJECT to a STRUCT
> SELECT schema_of_variant(parse_json('{"name": "jason", "age": 25 }'));
  OBJECT<age: BIGINT, name: STRING>
> SELECT CAST(parse_json('{"name": "jason", "age": 25 }') AS STRUCT<id: BIGINT, name: STRING>);
  {"id":null,"name":"jason"}

변형

targetTypeVARIANT이고 sourceExpr 형식의 경우:

  • 무효

    결과는 NULL 타입의 VARIANT입니다.

  • 숫자

    결과는 VARIANT숫자 값을 나타내는 값입니다. DECIMAL 형식의 정밀도가 <= 38이어야 합니다.

    모든 정수 계열 숫자는 .에 BIGINT매핑됩니다.

    모든 DECIMAL 값은 가장 좁은 정밀도 및 배율에 매핑됩니다.

  • 문자열

    결과는 VARIANT로, STRING 값을 나타냅니다.

  • 날짜

    결과는 VARIANT로, DATE 값을 나타냅니다.

  • 타임 스탬프

    결과는 VARIANT로, TIMESTAMP 값을 나타냅니다.

  • TIMESTAMP_NTZ

    결과는 VARIANT로, TIMESTAMP NTZ 값을 나타냅니다.

  • 불리언

    결과는 VARIANT로, BOOLEAN 값을 나타냅니다.

  • 바이너리

    결과는 VARIANT로, BINARY 값을 나타냅니다.

  • ARRAY < sourceElementType >

    sourceElementType에서 VARIANT로의 캐스팅이 지원되는 경우, 결과는 VARIANT로서 ARRAY<sourceElementType>를 나타냅니다.

    Azure Databricks 캐스트가 지원되지 않으면 오류가 발생합니다.

  • 구조체

    구조체 필드의 순서를 유지할 수 없으므로 VARIANT 이 캐스트는 직접 지원되지 않습니다. to_variant_object을 사용하여 STRUCTVARIANTOBJECT로 변환합니다.

  • 지도

    VARIANT 타입을 유지할 수 없으므로 MAP 캐스트는 직접적으로 지원되지 않습니다. to_variant_object을 사용하여 MAPVARIANTOBJECT로 변환합니다. 지도 키는 문자열이어야 합니다.

    Azure Databricks 캐스트가 지원되지 않으면 오류가 발생합니다.

    try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를 NULL(으)로 바꿉니다.

예제

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

> SELECT schema_of_variant(cast(5 AS VARIANT));
  BIGINT