cast
وظيفه
ينطبق على: Databricks SQL Databricks Runtime
تحويل القيمة expr
إلى نوع type
البيانات الهدف . عامل التشغيل هذا هو مرادف ل :: (علامة النقطين) عامل التشغيل
بناء الجملة
cast(sourceExpr AS targetType)
الوسيطات
sourceExpr
: أي تعبير قابل للصب.targetType
: نوع بيانات النتيجة.
المرتجعات
النتيجة هي نوع targetType
.
المجموعات التالية من صب نوع البيانات صالحة:
المصدر (صف) الهدف (العمود) | الفراغ | الرقميه | سلسله | تاريخ | الطابع الزمني | TIMESTAMP_NTZ | الفاصل الزمني للشهر السنوي | الفاصل الزمني لليوم | منطقيه | الثنائيه | الصفيف | خريطه | البنيه |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
الفراغ | نعم | السنة | السنة | السنة | السنة | السنة | السنة | السنة | السنة | السنة | السنة | السنة | نعم |
الرقميه | N | نعم | السنة | N | السنة | N | نعم | السنة | السنة | N | N | N | N |
سلسله | N | نعم | السنة | السنة | السنة | السنة | السنة | السنة | السنة | السنة | N | N | N |
تاريخ | N | N | نعم | السنة | السنة | السنة | N | N | N | N | N | N | N |
الطابع الزمني | N | نعم | السنة | السنة | السنة | السنة | N | N | N | N | N | N | N |
TIMESTAMP_NTZ | N | N | نعم | السنة | السنة | السنة | N | N | N | N | N | N | N |
الفاصل الزمني للشهر السنوي | N | نعم | السنة | N | N | N | السنة | N | N | N | N | N | N |
الفاصل الزمني لليوم | N | نعم | السنة | N | N | N | N | السنة | N | N | N | N | N |
منطقيه | N | نعم | السنة | N | السنة | N | N | N | السنة | N | N | N | N |
الثنائيه | N | نعم | السنة | N | N | N | N | N | N | السنة | N | N | N |
الصفيف | N | N | السنة | N | N | N | N | N | N | N | السنة | N | N |
خريطه | N | N | السنة | N | N | N | N | N | N | N | N | السنة | N |
البنيه | N | N | السنة | N | N | N | N | N | N | N | N | N | Y |
القواعد والقيود المستندة إلى targetType
تحذير
في Databricks Runtime، إذا كان spark.sql.ansi.enabled هو false
، فلن يتسبب تجاوز السعة في حدوث خطأ ولكن بدلا من ذلك سيقوم "بتضمين" النتيجة.
sourceExpr
ستؤدي القيمة ذات التنسيق غير الصالح أو الأحرف غير الصالحة NULL
ل targetType
إلى .
عددي
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
: النتيجة هي 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
سلسلة
targetType
إذا كان هو نوع STRING وكان sourceExpr
من النوع:
-
النتيجة هي سلسلة NULL.
-
والنتيجة هي الرقم الحرفي مع علامة ناقص اختيارية ولا توجد أصفار بادئة باستثناء الرقم الفردي إلى يسار الفاصلة العشرية.
targetType
إذا كان معDECIMAL(p, s)
s
0 أكبر، تتم إضافة فاصلة عشرية وتتم إضافة الأصفار اللاحقة لأعلى للتحجيم. -
إذا كان الرقم المطلق أقل من ذلك
10,000,000
وأكبر أو يساوي0.001
، يتم التعبير عن النتيجة دون تدوين علمي برقم واحد على الأقل على جانبي الفاصلة العشرية.بخلاف ذلك، يستخدم Azure Databricks مانتيسا متبوعا ب
E
و أس. تحتوي mantissa على علامة طرح بادئة اختيارية متبوعة برقم واحد إلى يسار الفاصلة العشرية، والحد الأدنى لعدد الأرقام أكبر من الصفر إلى اليمين. يحتوي الأس على علامة طرح بادئة اختيارية. -
إذا كانت السنة بين 9999 BCE و9999 CE، فإن النتيجة هي تاريخ سلسلة النموذج
-YYYY-MM-DD
وعلىYYYY-MM-DD
التوالي.بالنسبة للسنوات السابقة أو بعد هذا النطاق، تتم إضافة العدد الضروري من الأرقام إلى مكون
+
السنة ويتم استخدامه ل CE. -
إذا كان العام بين 9999 BCE و9999 CE، فإن النتيجة هي الطوابع الزمنية للنموذج
-YYYY-MM-DD hh:mm:ss
وعلىYYYY-MM-DD hh:mm:ss
التوالي.بالنسبة للسنوات السابقة أو بعد هذا النطاق، تتم إضافة العدد الضروري من الأرقام إلى مكون
+
السنة ويتم استخدامه ل CE.تتم إضافة الثوان الكسرية
.f...
إذا لزم الأمر. -
إذا كان العام بين 9999 BCE و9999 CE، فإن النتيجة هي الطوابع الزمنية للنموذج
-YYYY-MM-DD hh:mm:ss
وعلىYYYY-MM-DD hh:mm:ss
التوالي.بالنسبة للسنوات السابقة أو بعد هذا النطاق، تتم إضافة العدد الضروري من الأرقام إلى مكون
+
السنة ويتم استخدامه ل 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. -
والنتيجة هي الثنائي
sourceExpr
الذي يتم تفسيره على أنه تسلسل أحرف UTF-8.لا يتحقق Azure Databricks من صحة أحرف UTF-8. لن يقوم التحويل من
BINARY
إلىSTRING
أبدا بإدخال أحرف استبدال أو رفع خطأ. -
والنتيجة هي قائمة مفصولة بفواصل من العناصر المدلى بها، والتي يتم تجميدها بأقواس مربعة
[ ]
. مسافة واحدة تتبع كل فاصلة.NULL
يتم ترجمة عنصر إلى قيمة حرفيةnull
.لا يقوم Azure Databricks باقتباس العناصر الفردية أو وضع علامة عليها، والتي قد تحتوي نفسها على أقواس أو فواصل.
-
والنتيجة هي قائمة مفصولة بفواصل لأزواج قيم المفاتيح المصبوبة، والتي يتم تجميدها بأقواس متعرجة
{ }
. مسافة واحدة تتبع كل فاصلة. يتم فصل كل زوج من قيم المفاتيح ب->
.NULL
تتم ترجمة قيمة الخريطة إلى قيمة حرفيةnull
.لا يقوم Azure Databricks باقتباس المفاتيح أو القيم الفردية أو وضع علامة عليها، والتي قد تحتوي نفسها على أقواس متعرجة أو فواصل أو
->
. -
والنتيجة هي قائمة مفصولة بفواصل لقيم الحقول المصبوبة، والتي يتم تقويمها بأقواس متعرجة
{ }
. مسافة واحدة تتبع كل فاصلة.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);
{}
التاريخ
targetType
إذا كان هو نوع DATE وكان sourceExpr
من النوع:
-
النتيجة هي NULL DATE.
-
sourceExpr
يجب أن يكون dateString صالحا.إذا
sourceExpr
لم يكن صالحاdateString
، فإن Azure Databricks ترجع خطأ.استخدم try_cast لتحويل أخطاء البيانات غير الصالحة إلى
NULL
. -
النتيجة هي جزء التاريخ من الطابع
sourceExpr
الزمني . -
النتيجة هي جزء التاريخ من 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
الطابع الزمني
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 at00:00:00
hrs.
والنتيجة هي قيمة طابع زمني بنفس حقول السنة/الشهر/اليوم/الساعة/الدقيقة/الثانية من 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
targetType
إذا كان هو نوع TIMESTAMP_NTZ وكان sourceExpr
من النوع:
-
النتيجة هي NULL DATE.
-
sourceExpr
يجب أن يكون timestampString صالحا.إذا
sourceExpr
لم يكن صالحاtimestampString
، فإن Azure Databricks ترجع خطأ.استخدم try_cast لتحويل أخطاء البيانات غير الصالحة إلى
NULL
. -
والنتيجة هي
sourceExpr
DATE at00:00:00
hrs.
والنتيجة هي الوقت المحلي كما في 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
من النوع:
-
النتيجة هي فاصل زمني لمدة شهر 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
الفاصل الزمني لليوم
إذا كان عبارة عن targetType
فاصل زمني يومي وكان sourceExpr
من النوع:
-
النتيجة هي فاصل زمني فارغ لليوم.
-
ينطبق على: 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
قيمة منطقيةوكان sourceExpr
من النوع:
-
النتيجة هي قيمة منطقية فارغة.
-
إذا كان
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
.
الأمثلة
> 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
ثنائي
إذا كان عبارة عن targetType
BINARY وكان sourceExpr
من النوع:
الأمثلة
> 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
من النوع:
-
النتيجة هي NULL من
targeType
. -
إذا كان التحويل من
sourceElementType
إلىtargetElementType
مدعوما، تكون النتيجةARRAY<targetElementType>
مع جميع العناصر التي يتم تحويلها إلى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.
تعيين
targetType
إذا كان هو MAP < targetKeyType، targetValueType > وهو sourceExpr
من النوع:
-
النتيجة هي NULL من
targetType
. MAP <sourceKeyType, sourceValueType >
إذا كانت عمليات الإرسال من
sourceKeyType
targetKeyType
وإلىsourceValueType
targetValueType
مدعومة، تكونMAP<targetKeyType, targetValueType>
النتيجة مع جميع المفاتيح التي يتم تحويلها إلى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.
البنيه
targetType
إذا كان هو STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > وهو sourceExpr
من النوع:
-
النتيجة هي NULL من
targetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
sourceExpr
يمكن تحويل إلىtargetType
إذا كانت جميع الشروط صحيحة:- يحتوي نوع المصدر على نفس عدد الحقول مثل الهدف
- بالنسبة لجميع الحقول:
sourceFieldTypeN
يمكن تحويلها إلىtargetFieldTypeN
. - لكافة قيم الحقول: يمكن تحويل قيمة الحقل المصدر N إلى
targetFieldTypeN
والقيمة ليست فارغة إذا تم وضع علامة على الحقل الهدف N كNOT NULL
.
sourceFieldName
لا تطابق s وقيود المصدرNOT NULL
وs المصدر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