다음을 통해 공유


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의 범위를 벗어나면 오버플로 오류가 발생합니다.

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

  • 문자열

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

    리터럴 값의 형식을 준수하지 않으면 sourceExpr 오류가 발생합니다.

    값이 targetType의 범위를 벗어나면 오버플로 오류가 발생합니다.

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

  • 타임 스탬프

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

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

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

    결과가 targetType의 범위를 벗어나면 오버플로 오류가 발생합니다.

    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);
  Overflow

> SELECT cast(128 AS DECIMAL(2, 0));
  Overflow

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

> SELECT cast('123.0' AS INT);
  Invalid format

> 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: 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는 오류를 반환합니다.

    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

> 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의 범위를 벗어나면 오버플로 오류가 발생합니다.

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

  • 문자열

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

    sourceExpr이(가) 유효한 timestampString이(가) 아닌 경우 Azure Databricks는 오류를 반환합니다.

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

> 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는 오류를 반환합니다.

    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

> 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

> 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

> 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는 부울 형식 오류에 대한 잘못된 입력 구문을 반환합니다.

    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: invalid input syntax for type boolean

> 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: cannot cast array<string> to interval year

> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
  error: invalid input syntax for type boolean: o.

> 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: cannot cast map<string,string> to map<int,array<int>>

> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
  error: invalid input syntax for type boolean: o.

-- 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: cannot cast struct<a:string,b:date> to struct<b:boolean,c:date>

> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
  error: cannot cast struct<a:string,b:string> to struct<b:boolean,c:array<int>>

> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
  error: Cannot cast hello to DateType

> 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에서 오류가 발생합니다.

    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