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 | VARIANT | OBJECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | Y | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | N |
numeric | N | Y | 年 | N | 年 | N | Y | 年 | 年 | N | N | N | N | 年 | N |
STRING | N | Y | 年 | 年 | 年 | 年 | 年 | 年 | 年 | 年 | N | N | N | 年 | N |
DATE | N | N | Y | 年 | 年 | 年 | N | N | N | N | N | N | N | 年 | N |
TIMESTAMP | N | Y | 年 | 年 | 年 | 年 | N | N | N | N | N | N | N | 年 | N |
TIMESTAMP_NTZ | N | N | Y | 年 | 年 | 年 | N | N | N | N | N | N | N | 年 | N |
年月の間隔 | N | Y | 年 | N | N | N | 年 | N | N | N | N | N | N | N | N |
日付と時刻の間隔 | N | Y | 年 | N | N | N | N | 年 | N | N | N | N | N | N | N |
BOOLEAN | N | Y | 年 | N | 年 | N | N | N | 年 | N | N | N | N | 年 | N |
BINARY | N | Y | 年 | N | N | N | N | N | N | 年 | N | N | N | 年 | N |
ARRAY | N | N | 年 | N | N | N | N | N | N | N | 年 | N | N | 年 | N |
MAP | N | N | 年 | N | N | N | N | N | N | N | N | 年 | N | N | N |
STRUCT | N | N | 年 | N | N | N | N | N | N | N | N | N | 年 | N | N |
VARIANT | N | Y | 年 | 年 | 年 | 年 | N | N | Y | 年 | 年 | 年 | 年 | 年 | N |
OBJECT | N | N | N | N | N | N | N | N | N | N | N | Y | 年 | N | N |
targetType に基づく規則と制限事項
警告
Databricks Runtime では、spark.sql.ansi.enabled が false
の場合に、オーバーフローが原因でエラーが発生せず、代わりに結果が "ラップ" されます。
targetType
にとって無効な形式または無効な文字を持つ sourceExpr
値を指定すると、結果は NULL
になります。
numeric
targetType
が数値で sourceExpr
が次の型の場合:
-
結果は、指定された数値型の
NULL
です。 -
targetType
が整数の場合、結果は整数にsourceExpr
切り捨てられます。それ以外の場合、結果は
targetType
の使用可能なスケールに合わせてsourceExpr
丸められます。値が
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
文字列です。 -
結果は、省略可能なマイナス記号を持ち、小数点の左側の 1 桁を除き先頭に 0 がないリテラル数になります。
targetType
が、s
が 0 より大きいDECIMAL(p, s)
である場合は、小数点が追加され、後置ゼロが小数点以下桁数まで追加されます。 -
絶対数が
10,000,000
より小さく、0.001
以上の場合、結果は、指数表記を使用せず、小数点の両側に少なくとも 1 桁を使用して表されます。それ以外の場合、Azure Databricks では仮数の後に
E
と指数を続けた表記が使用されます。 仮数には、省略可能な先頭のマイナス記号の後に、小数点の左側に 1 桁の数字が続き、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 より小さい単位の場合、先頭のゼロは省略されます。一般的な年月の間隔の文字列の形式は次のとおりです。
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
結果は、間隔リテラルの最も短い表現になります。 間隔が負の場合、記号は
interval-string
に埋め込まれます。 10 より小さい単位の場合、先頭のゼロは省略されます。一般的な日時の間隔の文字列の形式は次のとおりです。
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
ブール値の結果はSTRING
型のリテラルtrue
です。false
の場合は STRING 型のリテラルfalse
です。NULL
の場合は NULL 文字列です。 -
結果は、UTF-8 文字シーケンスとして解釈されるバイナリ
sourceExpr
です。Azure Databricks では、UTF-8 文字は検証されません。
BINARY
からSTRING
の強制型変換により、置換文字が挿入されたり、エラーが発生したりすることはありません。 -
結果は、角かっこ
[ ]
で囲まれた強制型変換要素のコンマ区切りのリストになります。 各コンマの後に 1 つのスペースが置かれます。NULL
要素はリテラルnull
に変換されます。Azure Databricks では、個々の要素が引用符で囲まれたり、他の方法でマークされたりしません。要素自体に角かっこやコンマが含まれている可能性があります。
-
結果は、中かっこ
{ }
で囲まれた、キャスト キーと値のペアのコンマ区切りリストになります。 各コンマの後に 1 つのスペースが置かれます。 キーと値のペアはそれぞれ、->
で区切られます。NULL
マップ値はリテラルnull
に変換されます。Azure Databricks では、個々のキーや値が引用符で囲まれたり、他の方法でマークされたりしません。要素自体に中かっこ、コンマ、
->
が含まれている可能性があります。 -
結果は、中かっこ
{ }
で囲まれた、キャスト フィールド値のコンマ区切りリストになります。 各コンマの後に 1 つのスペースが置かれます。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
に変換します。 -
結果は、
sourceExpr
DATE の00:00:00
時になります。 -
結果は、セッション タイム ゾーンの
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
year-month interval
targetType
が年月の間隔で sourceExpr
が次の型の場合:
-
結果は
NULL
年月間隔です。 -
適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以上
数値は、
targetType
が yearmonthIntervalQualifier の下位単位の数として解釈されます。 -
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
day-time interval
targetType
が日時の間隔で sourceExpr
が次の型の場合:
-
結果は
NULL
日時間隔です。 -
適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以上
数値は、
targetType
が dayTimeIntervalQualifier の下位単位の数として解釈されます。 単位が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
が次の型の場合:
-
結果は
targeType
のNULL
です。 -
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
が次の型の場合:
-
結果は
targetType
のNULL
です。 MAP <sourceKeyType、sourceValueType>
sourceKeyType
からtargetKeyType
およびsourceValueType
からtargetValueType
への強制型変換がサポートされている場合、結果は、すべてのキーがtargetKeyType
に強制型変換され、すべての値がtargetValueType
に強制型変換されたMAP<targetKeyType, targetValueType>
になります。強制型変換がサポートされていない場合や、どのキーも値も強制型変換できない場合、Azure Databricks でエラーが発生します。
try_cast を使用して、無効なデータまたはオーバーフロー エラーを
NULL
に変換します。-
VARIANT
データ型によって保持される実際の値の型規則が適用されます。 OBJECT < [sourceFieldName : sourceFieldType [, …]] >
STRING
型のsourceFieldName
のそれぞれが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
が次の型の場合:
-
結果は
targetType
のNULL
です。 STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, …]] >
sourceExpr
をtargetType
にキャストできるのは、次の条件すべてに当てはまる場合です。- ソースの型のフィールドの数がターゲットと同じである
- すべてのフィールドの場合:
sourceFieldTypeN
はtargetFieldTypeN
に強制型変換できます。 - すべてのフィールド値の場合: ソース フィールドの値 N は
targetFieldTypeN
に強制型変換でき、ターゲット フィールド N がNOT NULL
としてマークされている場合、値は null ではありません。
sourceFieldName
、ソースNOT NULL
制約、ソースCOMMENT
は、targetType
に一致する必要はなく、無視されます。そのキャストが Azure Databricks でサポートされていない場合や、キャストできないフィールドがある場合は、エラーが生成されます。
try_cast を使用して、無効なデータまたはオーバーフロー エラーを
NULL
に変換します。-
VARIANT
データ型によって保持される実際の値の型規則が適用されます。 OBJECT < [sourceFieldName : sourceFieldType [, …]] >
すべての
sourceFieldName
が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
の値はすべて、その精度とスケールの幅を最小にしたものにマップされます。 -
結果は、その
STRING
の値を表すVARIANT
です。 -
結果は、その
DATE
の値を表すVARIANT
です。 -
結果は、その
TIMESTAMP
の値を表すVARIANT
です。 -
結果は、その
TIMESTAMP NTZ
の値を表すVARIANT
です。 -
結果は、その
BOOLEAN
の値を表すVARIANT
です。 -
結果は、その
BINARY
の値を表すVARIANT
です。 -
sourceElementType
からVARIANT
へのキャストがサポートされている場合は、結果はARRAY<sourceElementType>
を表すVARIANT
です。そのキャストが 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