적용 대상:
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.enabled가 false이면 오버플로로 인해 오류가 발생하지 않고 대신 결과를 "래핑"합니다.
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 UTC와sourceExpr사이에 경과된 시간(초)입니다.targetType이(가) 정수 숫자인 경우 결과는 정수로 잘립니다.그렇지 않으면 결과가 사용 가능한 배율에 맞게 반올림됩니다.
결과가
targetType의 범위를 벗어나면 오버플로 오류가 발생합니다.try_cast를 사용하여 오버플로 오류를
NULL(으)로 바꿉니다. -
적용 대상:
Databricks SQL
Databricks Runtime 11.3 LTS 이상대상 형식은 정확한 숫자여야 합니다.
INTERVAL upper_unit TO lower_unit이 지정되면 결과는lower_unit의 총 횟수로 측정됩니다.lower_unit가SECOND이면 소수 자릿수 초는 소수점 오른쪽에 저장됩니다. 다른 모든 간격의 경우 결과는 항상 정수입니다. -
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
스트링
sourceExpr이 STRING인 경우, 결과 STRING는 sourceExpr의 데이터 정렬을 상속합니다.
다른 모든 경우에 결과 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:ss의YYYY-MM-DD hh:mm:ss입니다.이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고
+은(는) CE에 사용됩니다.필요한 경우 소수 자릿수 초(
.f...)가 추가됩니다. -
연도가 기원전 9999년에서 기원후 9999년 사이인 경우, 결과는 각각 형식 및
-YYYY-MM-DD hh:mm:ss의YYYY-MM-DD hh:mm:ss입니다.이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고
+은(는) CE에 사용됩니다.필요한 경우 소수 자릿수 초(
.f...)가 추가됩니다. -
결과는 간격 리터럴의 가장 짧은 표현입니다. 간격이 음수이면 기호가
interval-string에 포함됩니다. 10보다 작은 단위의 경우 선행 0은 생략됩니다.일반적인 연도별 간격 문자열에는 다음과 같은 형식이 있습니다.
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
결과는 간격 리터럴의 가장 짧은 표현입니다. 간격이 음수이면 기호가
interval-string에 포함됩니다. 10보다 작은 단위의 경우 선행 0은 생략됩니다.일반적인 일 시간 간격 문자열에는 다음과 같은 형식이 있습니다.
INTERVAL 'D' DAYINTERVAL 'D h' DAY TO HOURINTERVAL 'D h:m' DAY TO MINUTEINTERVAL 'D h:m:s' DAY TO SECONDINTERVAL 'h' HOURINTERVAL 'h:m' HOUR TO MINUTEINTERVAL 'm:s' MINUTE TO SECONDINTERVAL 's' SECOND
-
부울
true의 결과는 리터럴STRINGtrue입니다.false의 경우 문자열 리터럴false입니다.NULLNULL 문자열입니다. -
결과는 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
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 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:00DATE입니다. -
결과는 세션 시간대의
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이(가) 다음 형식인 경우:
-
결과는 연월 간격
NULL입니다. -
적용 대상:
Databricks SQL
Databricks Runtime 11.3 LTS 이상숫자는 yearmonthIntervalQualifier의
targetType하위 단위 수로 해석됩니다. -
sourceExpr는 유효한 yearMonthIntervalString이어야 합니다.sourceExpr이(가) 유효한yearMonthIntervalString이(가) 아닌 경우 Azure Databricks는 오류를 반환합니다.try_cast를 사용하여 잘못된 데이터 오류를
NULL(으)로 바꿉니다. -
targetTypeyearMonthIntervalQualifier에 값이 포함된MONTH경우 값은 변경되지 않고 대상 형식과 일치하도록 재해석됩니다.그렇지 않은 경우 원본 형식 yearMonthIntervalQualifier에
MONTH이(가) 포함된 경우 결과는 전체 연도로 잘립니다.
예제
> 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이(가) 다음 형식인 경우:
-
결과는 일별 간격입니다
NULL. -
적용 대상:
Databricks SQL
Databricks Runtime 11.3 LTS 이상숫자는 dayTimeIntervalQualifier의
targetType하위 단위 수로 해석됩니다. 단위가SECOND이면 분수는 소수 자릿수 초로 해석됩니다. -
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
불리언
targetType이(가) BOOLEAN이고 sourceExpr이(가) 다음 형식인 경우:
-
결과는
NULL타입의BOOLEAN입니다. -
sourceExpr가 다음과 같은 경우:0: 결과는false입니다.-
NULL: 결과는NULL입니다. -
special floating point value: 결과는true입니다.
그렇지 않으면 결과는
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이(가) 다음 형식인 경우:
-
결과는
NULL의targeType결과입니다. -
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이(가) 다음 형식인 경우:
-
결과는
NULL의targetType결과입니다. MAP <sourceKeyType, sourceValueType >
sourceKeyType에서targetKeyType(으)로 그리고sourceValueType에서targetValueType(으)로의 캐스팅이 지원되는 경우 결과는 모든 키가MAP<targetKeyType, targetValueType>(으)로 캐스팅되고 모든 값이targetKeyType(으)로 캐스팅되는targetValueType입니다.캐스트가 지원되지 않거나 키 또는 값을 캐스팅할 수 없는 경우 Azure Databricks에서 오류가 발생합니다.
try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를
NULL(으)로 바꿉니다.-
실제 값을 보유하는 데이터 형식에 대한 형식 규칙이
VARIANT에 적용됩니다. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
각
sourceFieldName의 형식STRING은targetKeyType로 캐스팅되어 맵 키에 매핑됩니다. 각 원본 필드 값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이(가) 다음 형식인 경우:
-
결과는
NULL의targetType결과입니다. 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(으)로 바꿉니다.-
실제 값을 보유하는 데이터 형식에 대한 형식 규칙이
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"}
변형
targetType가 VARIANT이고 sourceExpr 형식의 경우:
-
결과는
NULL타입의VARIANT입니다. -
결과는
VARIANT숫자 값을 나타내는 값입니다.DECIMAL형식의 정밀도가 <= 38이어야 합니다.모든 정수 계열 숫자는 .에
BIGINT매핑됩니다.모든
DECIMAL값은 가장 좁은 정밀도 및 배율에 매핑됩니다. -
결과는
VARIANT로,STRING값을 나타냅니다. -
결과는
VARIANT로,DATE값을 나타냅니다. -
결과는
VARIANT로,TIMESTAMP값을 나타냅니다. -
결과는
VARIANT로,TIMESTAMP NTZ값을 나타냅니다. -
결과는
VARIANT로,BOOLEAN값을 나타냅니다. -
결과는
VARIANT로,BINARY값을 나타냅니다. -
sourceElementType에서VARIANT로의 캐스팅이 지원되는 경우, 결과는VARIANT로서ARRAY<sourceElementType>를 나타냅니다.캐스트가 지원되지 않으면 Azure Databricks에서 오류가 발생합니다.
-
구조체 필드의 순서를 유지할 수 없으므로
VARIANT이 캐스트는 직접 지원되지 않습니다. to_variant_object을 사용하여STRUCT를VARIANT로OBJECT로 변환합니다. -
VARIANT타입을 유지할 수 없으므로MAP캐스트는 직접적으로 지원되지 않습니다. to_variant_object을 사용하여MAP를VARIANT로OBJECT로 변환합니다. 지도 키는 문자열이어야 합니다.캐스트가 지원되지 않으면 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