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 | 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 | 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 |
القواعد والقيود المستندة إلى 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
: النتيجة هي 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
سلسلة
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 باقتباس قيم الحقول الفردية أو وضع علامة عليها، والتي قد تحتوي نفسها على أقواس متعرجة أو فواصل.
-
تنطبق قواعد نوع القيمة الفعلية للنوع
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
التاريخ
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
الطابع الزمني
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 at00:00:00
hrs. -
والنتيجة هي الوقت المحلي كما في
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 وما فوق
يتم تفسير الرقم على أنه عدد من الوحدات السفلية
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
من النوع:
-
والنتيجة هي فاصل
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
قيمة منطقية وكان 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
. -
والنتيجة هي ترميز UTF-8 ل
surceExpr
. -
تنطبق قواعد النوع للقيمة الفعلية التي يحتفظ بها
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
مدعوما، تكون النتيجة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
وتعيينه إلى مفتاح خريطة. يتم تحويلtargetValueType
كل قيمةsourceFieldType
حقل مصدر لها وتعيين قيمة الخريطة المعنية.يثير 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] [, ...]] >
sourceExpr
يمكن تحويل إلىtargetType
إذا كانت جميع هذه الشروط صحيحة:- يحتوي نوع المصدر على نفس عدد الحقول مثل الهدف
- بالنسبة لجميع الحقول:
sourceFieldTypeN
يمكن تحويلها إلىtargetFieldTypeN
. - لكافة قيم الحقول: يمكن تحويل قيمة الحقل المصدر N إلى
targetFieldTypeN
والقيمة ليست فارغة إذا تم وضع علامة على الحقل الهدف N كNOT NULL
.
sourceFieldName
لا تطابق s وقيود المصدرNOT NULL
وs المصدرCOMMENT
وtargetType
و يتم تجاهلها.يثير Azure Databricks خطأ إذا لم يكن الإرسال مدعوما أو إذا تعذر تحويل أي من الحقول.
استخدم try_cast لتحويل البيانات غير الصالحة أو أخطاء تجاوز السعة إلى
NULL
.-
تنطبق قواعد النوع للقيمة الفعلية التي يحتفظ بها
VARIANT
نوع البيانات. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
يتم مطابقة جميع
sourceFieldName
s معsourceFieldName
s. يتم تحويل كل قيمة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 خطأ إذا لم يكن الإرسال مدعوما.
استخدم 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