هل تعادل إضافة شهر مرتين إضافة شهرين مرة واحدة في MySQL؟

متقدمقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

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

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

مثال

SELECT DATE_ADD(DATE_ADD('2023-01-31', INTERVAL 1 MONTH), INTERVAL 1 MONTH) AS repeated,
       DATE_ADD('2023-01-31', INTERVAL 2 MONTH) AS direct;

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

باختصار: قد تؤدي الخطوات الشهرية المتتابعة إلى يوم مختلف عن الإضافة المباشرة، بسبب تعديل اليوم في النتائج الوسيطة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

ما التاريخان الناتجان بالترتيب repeated ثم direct؟

CREATE TABLE orders (starts_on DATE);
INSERT INTO orders VALUES ('2023-01-31');
SELECT DATE_ADD(DATE_ADD(starts_on, INTERVAL 1 MONTH), INTERVAL 1 MONTH) AS repeated,
       DATE_ADD(starts_on, INTERVAL 2 MONTH) AS direct
FROM orders;