cast
기능
적용 대상: Databricks SQL Databricks Runtime
값 expr
을 대상 데이터 형식 type
으로 캐스트합니다. 이 연산자는 ::(콜론 콜론 기호) 연산자의 동의어 입니다.
구문
cast(sourceExpr AS targetType)
인수
sourceExpr
: 캐스팅 가능한 모든 식입니다.targetType
: 결과의 데이터 형식입니다.
반품
결과는 형식 targetType
입니다.
다음과 같은 데이터 형식 캐스팅 조합이 유효합니다.
원본(행) 대상(열) | VOID | numeric | STRING | DATE | TIMESTAMP | TIMESTAMP_NTZ | 연도-월 간격 | 일 시간 간격 | BOOLEAN | BINARY | ARRAY | MAP | STRUCT | 변체 | OBJECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
numeric | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N | Y | N |
STRING | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
DATE | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | 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 |
BOOLEAN | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINARY | N | Y | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
ARRAY | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
MAP | N | N | Y | N | N | N | N | N | N | N | N | Y | N | N | N |
STRUCT | 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 |
OBJECT | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N |
targetType 기반 규칙 및 제한 사항
Warning
Databricks Runtime에서 spark.sql.ansi.enabled가 false
이면 오버플로로 인해 오류가 발생하지 않고 대신 결과를 "래핑"합니다.
targetType
에 대한 형식이 잘못되었거나 잘못된 문자가 있는 sourceExpr
값은 NULL
이(가) 됩니다.
numeric
targetType
이(가) 숫자이고 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 지정된 숫자 형식의 결과입니다
NULL
. -
정수 숫자인 경우
targetType
결과는sourceExpr
정수로 잘립니다.그렇지 않으면 결과는
sourceExpr
사용 가능한 배율targetType
에 맞게 반올림됩니다.값이
targetType
의 범위를 벗어나면 오버플로 오류가 발생합니다.try_cast를 사용하여 오버플로 오류를
NULL
(으)로 바꿉니다. -
sourceExpr
은(는)targetType
의 리터럴 값으로 읽혀집니다.sourceExpr
이(가) 리터럴 값의 형식을 준수하지 않으면 오류가 발생합니다.값이
targetType
의 범위를 벗어나면 오버플로 오류가 발생합니다.try_cast를 사용하여 오버플로 및 잘못된 형식 오류를
NULL
(으)로 바꿉니다. -
결과는
1970-01-01 00:00:00 UTC
와sourceExpr
사이에 경과된 시간(초)입니다.targetType
이(가) 정수 숫자인 경우 결과는 정수로 잘립니다.그렇지 않으면 결과가 사용 가능한
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
STRING
targetType
이(가) STRING 형식이고 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 문자열입니다
NULL
. -
결과는 선택적 빼기 기호가 있는 리터럴 번호이고 소수점 왼쪽의 한 숫자를 제외하고 선행 0이 없습니다.
targetType
이(가)DECIMAL(p, s)
이고s
이(가) 0보다 크면 소수점이 추가되고 후행 0이 확장되도록 추가됩니다. -
절대 숫자가
10,000,000
보다 작고0.001
보다 크거나 같으면 결과는 소수점 양쪽에 하나 이상의 숫자를 가진 과학적 표기법 없이 표현됩니다.그렇지 않으면 Azure Databricks는 가수 뒤에
E
와 지수를 사용합니다. 매니티사에는 선택적 선행 빼기 기호와 소수점 왼쪽의 한 자리, 오른쪽에 0보다 큰 최소 자릿수가 있습니다. 지수에는 선택적 선행 빼기 기호가 있습니다. -
연도가 9999 BCE에서 9999 CE 사이인 경우 결과는 각각 양식
-YYYY-MM-DD
및YYYY-MM-DD
의 dateString입니다.이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고
+
은(는) CE에 사용됩니다. -
연도가 9999 BCE에서 9999 CE 사이인 경우 결과는 각각 양식
-YYYY-MM-DD hh:mm:ss
및YYYY-MM-DD hh:mm:ss
의 timestampString입니다.이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고
+
은(는) CE에 사용됩니다.필요한 경우 소수 자릿수 초(
.f...
)가 추가됩니다. -
연도가 9999 BCE에서 9999 CE 사이인 경우 결과는 각각 양식
-YYYY-MM-DD hh:mm:ss
및YYYY-MM-DD hh:mm:ss
의 timestampString입니다.이 범위 이전 또는 이후 몇 년 동안 필요한 자릿수가 연도 구성 요소에 추가되고
+
은(는) 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
결과는 리터럴true
입니다STRING
.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
DATE
targetType
이(가) DATE 형식이고 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 .입니다
NULL
DATE
. -
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
TIMESTAMP
targetType
이(가) TIMESTAMP 형식이고 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 .입니다
NULL
DATE
. -
sourceExpr
은(는)1970-01-01 00:00:00 UTC
이후의 초 수로 읽혀집니다.마이크로초보다 작은 분수는 잘립니다.
값이
TIMESTAMP
의 범위를 벗어나면 오버플로 오류가 발생합니다.try_cast를 사용하여 오버플로 오류를
NULL
(으)로 바꿉니다. -
sourceExpr
는 유효한 timestampString이어야 합니다.sourceExpr
이(가) 유효한timestampString
이(가) 아닌 경우 Azure Databricks는 오류를 반환합니다.try_cast를 사용하여 잘못된 데이터 오류를
NULL
(으)로 바꿉니다. -
결과는
sourceExpr
DATE
시간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
형식인 경우:
-
결과는 .입니다
NULL
DATE
. -
sourceExpr
는 유효한 timestampString이어야 합니다.sourceExpr
이(가) 유효한timestampString
이(가) 아닌 경우 Azure Databricks는 오류를 반환합니다.try_cast를 사용하여 잘못된 데이터 오류를
NULL
(으)로 바꿉니다. -
결과는
00:00:00
시간 단위의sourceExpr
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
이(가) 다음 형식인 경우:
-
결과는 1년 간격입니다
NULL
. -
적용 대상: Databricks SQL Databricks Runtime 11.3 LTS 이상
숫자는 yearmonthIntervalQualifier의
targetType
하위 단위 수로 해석됩니다. -
sourceExpr
는 유효한 yearMonthIntervalString이어야 합니다.sourceExpr
이(가) 유효한yearMonthIntervalString
이(가) 아닌 경우 Azure Databricks는 오류를 반환합니다.try_cast를 사용하여 잘못된 데이터 오류를
NULL
(으)로 바꿉니다. -
targetType
yearMonthIntervalQualifier에 값이 포함된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
(으)로 바꿉니다. -
targetType
dayTimeIntervalQualifier에 원본 형식 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
이(가) 다음 형식인 경우:
-
결과는 형식
BOOLEAN
입니다NULL
. -
있는 경우
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
BINARY
targetType
이(가) BINARY이고 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 형식
BINARY
입니다NULL
. -
결과는
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
ARRAY
targetType
이(가) ARRAY < targetElementType > 이며 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 .
NULL
의targeType
결과입니다. -
sourceElementType
에서targetElementType
(으)로의 캐스팅이 지원되는 경우 결과는 모든 요소가targetElementType
(으)로 캐스팅된ARRAY<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]
MAP
targetType
이(가) MAP <targetKeyType, targetValueType>이며 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 .
NULL
의targetType
결과입니다. MAP <sourceKeyType, sourceValueType >
sourceKeyType
에서targetKeyType
(으)로 그리고sourceValueType
에서targetValueType
(으)로의 캐스팅이 지원되는 경우 결과는 모든 키가targetKeyType
(으)로 캐스팅되고 모든 값이targetValueType
(으)로 캐스팅되는MAP<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}
STRUCT
targetType
이(가) STRUCT < [targetFieldName:targetFieldType [NOT NULL][COMMENT str][, …]] >이고 sourceExpr
이(가) 다음 형식인 경우:
-
결과는 .
NULL
의targetType
결과입니다. STRUCT < [sourceFieldName:sourceFieldType [NOT NULL][COMMENT str][, …]] >
이러한
sourceExpr
모든 조건이 true인 경우 캐스팅할targetType
수 있습니다.- 원본 형식의 필드 수가 대상과 같습니다.
- 모든 필드의 경우:
sourceFieldTypeN
을(를)targetFieldTypeN
(으)로 캐스팅할 수 있습니다. - 모든 필드 값의 경우: 원본 필드 값 N을
targetFieldTypeN
(으)로 캐스팅할 수 있으며 대상 필드 N이NOT NULL
(으)로 표시된 경우 값은 null이 아닙니다.
sourceFieldName
, 원본NOT NULL
제약 조건 및COMMENT
원본은targetType
와(과) 일치하지 않아도 되며 무시됩니다.캐스트가 지원되지 않거나 필드를 캐스팅할 수 없는 경우 Azure Databricks에서 오류가 발생합니다.
try_cast를 사용하여 잘못된 데이터 또는 오버플로 오류를
NULL
(으)로 바꿉니다.-
데이터 형식에서 보유하는 실제 값에
VARIANT
대한 형식 규칙이 적용됩니다. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
모든
sourceFieldName
s가 s와 일치합니다sourceFieldName
. 각 원본 필드 값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"}
VARIANT
targetType
VARIANT이고 sourceExpr
형식인 경우:
-
결과는 형식
VARIANT
입니다NULL
. -
결과는
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에서 오류가 발생합니다.
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