إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على:
Databricks SQL
Databricks Runtime
إرجاع طرح من expr2 expr1.
بناء الجملة
expr1 - expr2
الوسيطات
expr1: تعبير رقمي أو تاريخ أو طابع زمني أو فاصل زمني.expr2: يعتمد النوع المقبول على نوعexpr:- إذا كان
expr1عبارة عن تعبير رقميexpr2، فيجب أن يكون تعبيرا رقميا - إذا كان
expr1فاصلا زمنيا لمدة شهر أو يوم،expr2فيجب أن يكون من فئة المطابقة للفاصل الزمني. - وإلا
expr2يجب أن يكون DATE أو TIMESTAMP.
- إذا كان
المرتجعات
يتم تحديد نوع النتيجة بالترتيب التالي:
- إذا كان
expr1رقميا، فإن النتيجة هي النوع الأقصى الشائع للوسيطات. - إذا كان
expr1عبارة عن DATE وكانexpr2عبارة عن فاصل زمني لليوم، تكون النتيجة TIMESTAMP. - إذا كان
expr1TIMESTAMP وكانexpr2فاصلا زمنيا، تكون النتيجة TIMESTAMP. - إذا كانت
expr1وexpr2DATEs تكون النتيجة هيINTERVAL DAYS. - إذا كانت
expr1النتيجة TIMESTAMP أوexpr2هيINTERVAL DAY TO SECOND. - إذا كانت
expr1وexpr2عبارة عن فترات زمنية لمدة شهر، تكون النتيجة عبارة عن فاصل زمني لمدة شهر من وحدات واسعة بما يكفي لتمثيل النتيجة. - إذا كانت
expr1وexpr2عبارة عن فواصل زمنية لليوم، تكون النتيجة فاصلا زمنيا لليوم بوحدات عريضة بما يكفي لتمثيل النتيجة. - وإلا، فإن نوع النتيجة يطابق
expr1.
إذا كان كلا التعبيرين عبارة عن فاصل زمني، فيجب أن يكونا من نفس الفئة.
عند طرح فاصل زمني لمدة شهر من DATE، يضمن Databricks SQL تكوين التاريخ الناتج بشكل جيد.
إذا تجاوزت النتيجة نوع النتيجة، فإن Databricks SQL يثير خطأ ARITHMETIC_OVERFLOW .
استخدم try_subtract للعودة NULL إلى تجاوز الحد الأقصى.
تحذير
في Databricks Runtime، إذا كان spark.sql.ansi.enabled هو false، فإن التجاوز لا يسبب خطأ ولكنه "يلتف" النتيجة بدلا من ذلك.
الأمثلة
> SELECT 2 - 1;
1
> SELECT DATE'2021-03-20' - INTERVAL '2' MONTH
2021-1-20
> SELECT TIMESTAMP'2021-03-20 12:15:29' - INTERVAL '3' SECOND
2021-03-20 12:15:26
> SELECT typeof(INTERVAL '3' DAY - INTERVAL '2' HOUR);
interval day to hour
> SELECT typeof(current_date - (current_date + INTERVAL '1' DAY));
interval day
> SELECT typeof(current_timestamp - (current_date + INTERVAL '1' DAY));
interval day to second
> SELECT DATE'2021-03-31' - INTERVAL '1' MONTH;
2021-02-28
> SELECT -100Y - 100Y;
Error: ARITHMETIC_OVERFLOW