سؤال

أحتاج إلى طريقة لتحديد عدد الأيام بين تاريخين في SQL.

يجب أن يكون الجواب في ANSI SQL.

هل كانت مفيدة؟

المحلول

وANSI SQL-92 يحدد التاريخ - التاريخ كما تعود نوع INTERVAL. من المفترض أن تكون قادرة على استخراج سكالارس من فترات باستخدام نفس الأسلوب كما استخراج لهم من التواريخ باستخدام - بشكل مناسب بما فيه الكفاية - وظيفة EXTRACT (4.5.3)

<اقتباس فقرة>   

<استخراج التعبير> يعمل على   على التاريخ والوقت أو فاصل وإرجاع   قيمة رقمية بدقة تمثل   قيمة عنصر واحد من التاريخ والوقت   أو الفاصلة.

ومع ذلك، يتم تطبيق هذا سيئة للغاية في معظم قواعد البيانات. ربما كنت عالقا باستخدام شيء قاعدة بيانات محددة. وإلى حد ما نفذت DATEDIFF أيضا عبر منصات مختلفة.

وهنا الطريقة "الحقيقية" للقيام بذلك.

SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;

وحظا سعيدا!

نصائح أخرى

لا أستطيع أن أتذكر باستخدام RDBMS التي لا تدعم DATE1-DATE2 و <لأ href = "http://www.ibphoenix.com/main.nfs؟a=ibphoenix&page=ibp_60_sql_date_fs" يختلط = "نوفولو noreferrer "> SQL 92 يبدو أن نوافق على ذلك.

وأعتقد أن يدعم SQL-92 القياسية يحذف تاريخين مع '-'. المشغل

SQL 92 يدعم بناء الجملة التالي:

t.date_1 - t.date_2

استخراج وظيفة هو أيضا ANSI, ولكنها ليست معتمدة على SQL Server.على سبيل المثال:

ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)

التفاف حساب في قيمة مطلقة وظيفة يضمن قيمة سوف يخرج إيجابية ، حتى لو كان أصغر التاريخ هو التاريخ الأول.

مستخلص معتمد على:

  • أوراكل 9i+
  • الخلية
  • بوستجرس
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top