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... إذا لزم الأمر.

  • TIMESTAMP_NTZ

    إذا كان العام بين 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

    النتيجة هي جزء التاريخ من 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 at 00:00:00hrs.

  • TIMESTAMP_NTZ

والنتيجة هي قيمة طابع زمني بنفس حقول السنة/الشهر/اليوم/الساعة/الدقيقة/الثانية من 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 at 00:00:00hrs.

  • الطابع الزمني

والنتيجة هي الوقت المحلي كما في 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 من النوع:

الأمثلة

> 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 من النوع:

  • الفراغ

    النتيجة هي فاصل زمني فارغ لليوم.

  • exact_numeric

    ينطبق على:وضع علامة 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.

      وإلا، فإن النتيجة هي 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

ثنائي

إذا كان عبارة عن targetTypeBINARY وكان sourceExpr من النوع:

  • الفراغ

    النتيجة هي NULL Binary.

  • سلسله

    والنتيجة هي ترميز UTF-8 ل surceExpr.

الأمثلة

> 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 >

    إذا كانت عمليات الإرسال من sourceKeyTypetargetKeyType وإلى sourceValueTypetargetValueType مدعومة، تكون 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