cast 함수

적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks 런타임

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

구문

cast(sourceExpr AS targetType)

인수

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

반품

결과는 형식 targetType입니다.

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

원본(행) 대상(열) VOID numeric STRING DATE TIMESTAMP TIMESTAMP_NTZ 연도-월 간격 일 시간 간격 BOOLEAN BINARY ARRAY MAP STRUCT
VOID Y Y Y Y Y Y Y Y Y Y Y Y Y
numeric N Y Y N Y N Y Y Y N N N N
STRING N Y Y Y Y Y Y Y Y Y N N N
DATE N N Y Y Y Y N N N N N N N
TIMESTAMP N Y Y Y Y Y N N N N N N N
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N
연도-월 간격 N Y Y N N N Y N N N N N N
일 시간 간격 N Y Y N N N N Y N N N N N
BOOLEAN N Y Y N Y N N N Y N N N N
BINARY N Y Y N N N N N N Y N N N
ARRAY N N Y N N N N N N N Y N N
MAP N N Y N N N N N N N N Y N
STRUCT N N Y N N N N N N N N N Y

targetType 기반 규칙 및 제한 사항

Warning

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

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

numeric

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

  • VOID

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

  • numeric

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

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

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

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

  • STRING

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

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

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

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

  • TIMESTAMP

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

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

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

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

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

  • INTERVAL

    적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 11.3 LTS 이상

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

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

  • BOOLEAN

    있는 경우 sourceExpr :

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

예제

> 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

STRING

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

  • VOID

    결과는 NULL 문자열입니다.

  • 정확한 수치

    결과는 선택적 빼기 기호가 있는 리터럴 번호이고 소수점 왼쪽의 한 숫자를 제외하고 선행 0이 없습니다. targetType이(가) DECIMAL(p, s)이고 s이(가) 0보다 크면 소수점이 추가되고 후행 0이 확장되도록 추가됩니다.

  • floating-point binary

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

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

  • DATE

    연도가 9999 BCE에서 9999 CE 사이인 경우 결과는 각각 양식 -YYYY-MM-DDYYYY-MM-DDdateString입니다.

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

  • TIMESTAMP

    연도가 9999 BCE에서 9999 CE 사이인 경우 결과는 각각 양식 -YYYY-MM-DD hh:mm:ssYYYY-MM-DD hh:mm:sstimestampString입니다.

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

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

  • TIMESTAMP_NTZ

    연도가 9999 BCE에서 9999 CE 사이인 경우 결과는 각각 양식 -YYYY-MM-DD hh:mm:ssYYYY-MM-DD hh:mm:sstimestampString입니다.

    이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고 +은(는) 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
  • BOOLEAN

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

  • BINARY

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

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

  • ARRAY

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

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

  • MAP

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

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

  • STRUCT

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

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

예제

> 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);
  {}

DATE

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

  • VOID

    결과는 Null DATE입니다.

  • STRING

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

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

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

  • TIMESTAMP

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

  • TIMESTAMP_NTZ

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

예제

> 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

timestamp

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

  • VOID

    결과는 Null DATE입니다.

  • numeric

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

    마이크로초보다 작은 분수는 잘립니다.

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

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

  • STRING

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

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

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

  • DATE

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

  • TIMESTAMP_NTZ

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

예제

> 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

TIMESTAMP_NTZ

targetTypeTIMESTAMP_NTZ 형식이고 sourceExpr 형식인 경우:

  • VOID

    결과는 Null DATE입니다.

  • STRING

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

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

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

  • DATE

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

  • TIMESTAMP

결과는 세션 표준 시간대의 sourceExpr 현지 시간입니다.

예제

> 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

연-월 간격

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

  • VOID

    결과는 NULL 연도-월 간격입니다.

  • integral_numeric

    적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 11.3 LTS 이상

    숫자는 targetTypeyearmonthIntervalQualifier의 하위 단위 수로 해석됩니다.

  • STRING

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

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

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

  • 연도-월 간격

    targetTypeyearMonthIntervalQualifierMONTH이(가) 포함된 경우 값은 변경되지 않고 대상 형식과 일치하도록 재해석됩니다.

    그렇지 않은 경우 원본 형식 yearMonthIntervalQualifierMONTH이(가) 포함된 경우 결과는 전체 연도로 잘립니다.

예제

> 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이(가) 다음 형식인 경우:

  • VOID

    결과는 NULL 날짜-시간 간격입니다.

  • exact_numeric

    적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 11.3 LTS 이상

    숫자는 targetTypedayTimeIntervalQualifier의 하위 단위 수로 해석됩니다. 단위가 SECOND이면 분수는 소수 자릿수 초로 해석됩니다.

  • STRING

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

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

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

  • 일 시간 간격

    targetTypedayTimeIntervalQualifier에 원본 형식 dayTimeIntervalQualifier의 가장 작은 단위가 포함된 경우 값은 변경되지 않고 대상 형식과 일치하도록 재해석됩니다.

    그렇지 않으면 sourceExpr 간격이 targetType에 맞게 잘립니다.

> 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

BOOLEAN

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

  • VOID

    결과는 NULL 부울입니다.

  • numeric

    있는 경우 sourceExpr :

    • 0: 결과는 false입니다.

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

  • STRING

    sourcEexpr(대/소문자 구분하지 않음):

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

    그렇지 않으면 Azure Databricks는 부울 형식 오류에 대한 잘못된 입력 구문을 반환합니다.

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

예제

> 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

BINARY

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

  • VOID

    결과는 Null 이진입니다.

  • STRING

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

예제

> SELECT cast(NULL AS BINARY);
  NULL

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

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

ARRAY

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

  • VOID

    결과는 targeType의 Null입니다.

  • ARRAY < sourceElementType >

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

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

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

예제

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

MAP

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

  • VOID

    결과는 targetType의 Null입니다.

  • MAP <sourceKeyType, sourceValueType >

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

STRUCT

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

  • VOID

    결과는 targetType의 Null입니다.

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

    다음 세 조건이 모두 true인 경우 sourceExpr을(를) targetType(으)로 캐스팅할 수 있습니다.

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

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

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

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

예제

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

> SELECT cast(named_struct('a', 't', 'b', '1900') 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