في هذا الدرس 6تصفّح المواضيع
لقراءة التاريخ أو الوقت الحالي لخادم قاعدة البيانات داخل الاستعلام، يوفر MySQL 8 مجموعة دوال زمنية قياسية:
- دالة
NOW()(أوCURRENT_TIMESTAMP): تعيد التاريخ والوقت معاً بصيغة'YYYY-MM-DD hh:mm:ss'حسب المنطقة الزمنية للجلسة، وتثبت قيمتها عند لحظة بدء تنفيذ الاستعلام. - دالتا
CURDATE()وCURTIME(): تعيد الأولى التاريخ الحالي فقط، وتعيد الثانية الوقت الحالي فقط. - دالتا
UTC_DATE()وUTC_TIMESTAMP(): تعيدان التوقيت العالمي المنسق UTC مباشرة بغض النظر عن المنطقة الزمنية المحلية للخادم.
SELECT
NOW() AS current_dt,
CURDATE() AS today_date,
CURTIME() AS current_clock,
UTC_TIMESTAMP() AS utc_dt;
عند تجميع المبيعات حسب السنة أو الشهر أو الربع المالي، أو استخلاص جزء محدد من عمود تاريخ، نستخدم دوال استخراج الأجزاء الزمنية:
- دوال
YEAR(dt)وMONTH(dt)وDAY(dt): تعيد السنة كعدد صحيح، أو رقم الشهر (1..12)، أو يوم الشهر (1..31). - دوال
HOUR(dt)وMINUTE(dt)وSECOND(dt): لاستخراج الساعة والدقيقة والثانية. - الدالة القياسية
EXTRACT(unit FROM dt): تدعم استخراج وحدات مفردة أو مركبة مثلQUARTERأوYEAR_MONTH(مثل202611).
SELECT
order_id,
YEAR(created_at) AS order_year,
MONTH(created_at) AS order_month,
DAY(created_at) AS order_day,
EXTRACT(YEAR_MONTH FROM created_at) AS ym_code
FROM orders;
لحساب تاريخ انتهاء الاشتراك أو موعد الاستحقاق بدقة تراعي اختلاف عدد أيام الشهور والسنوات الكبيسة، نستخدم دوال الحساب الزمني مع الكلمة المفتاحية INTERVAL:
- دالة الإضافة
DATE_ADD(date, INTERVAL expr unit): تضيف فترة زمنية محددة مثلINTERVAL 7 DAYأوINTERVAL 3 MONTHأوINTERVAL 1 YEARإلى التاريخ. - دالة الطرح
DATE_SUB(date, INTERVAL expr unit): تطرح الفترة الزمنية المحددة من التاريخ (مثلاً جلب طلبات آخر 30 يوماً). - دالة
LAST_DAY(date): تعيد تاريخ آخر يوم في الشهر تلقائياً.
SELECT
subscription_id,
start_date,
DATE_ADD(start_date, INTERVAL 1 YEAR) AS expires_on,
DATE_SUB(CURDATE(), INTERVAL 30 DAY) AS thirty_days_ago,
LAST_DAY(start_date) AS billing_month_end
FROM subscriptions;
لقياس الفارق الزمني بين تاريخين أو طابعين زمنيين، يوفر MySQL دالتين متخصصتين يجب الانتباه لترتيب المعاملات في كل منهما:
- دالة فرق الأيام
DATEDIFF(expr1, expr2): تحسب ناتج الطرحexpr1 - expr2بالأيام الكاملة فقط مع تجاهل الساعات والدقائق؛ وتكون النتيجة موجبة إذا كان التاريخ الأول أحدث من الثاني. - دالة الفرق المحدد بالوحدة
TIMESTAMPDIFF(unit, start_dt, end_dt): تحسب الفارقend_dt - start_dtبالوحدة التي تختارها مثلHOURأوMINUTEأوMONTHأوYEAR.
SELECT
invoice_id,
DATEDIFF(due_date, issued_date) AS net_payment_days,
TIMESTAMPDIFF(HOUR, created_at, shipped_at) AS fulfillment_hours,
TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS customer_age
FROM invoices;
يخزن MySQL جميع التواريخ داخلياً بالصيغة القياسية YYYY-MM-DD. وعندما نريد عرض التاريخ بصيغة مخصصة للتقارير أو الواجهات نستخدم دالة DATE_FORMAT(date, format) مع رموز التنسيق:
- الرمزان
%Yو%y: السنة من 4 أرقام (2026) أو من رقمين (26). - الرموز
%mو%Mو%b: رقم الشهر من خانتين (01..12)، أو اسم الشهر الكامل، أو المختصر. - الرموز
%dو%Hو%iو%s: رقم اليوم، والساعة بنظام 24 ساعة، والدقائق، والثواني.
SELECT
order_id,
DATE_FORMAT(created_at, '%Y-%m-%d') AS iso_date,
DATE_FORMAT(created_at, '%d/%m/%Y %H:%i') AS arab_display,
STR_TO_DATE('15-11-2026', '%d-%m-%Y') AS parsed_date
FROM orders;
يلخص الجدول المرجعي التالي أهم دوال التاريخ والوقت وحساب الفروق الزمنية في MySQL 8:
| الدالة الزمنية | الوظيفة الأساسية | مثال الاستدعاء | النتيجة |
|---|---|---|---|
NOW() / CURDATE() | التوقيت أو التاريخ الحالي | CURDATE() | '2026-11-08' |
EXTRACT(unit FROM d) | استخراج جزء من التاريخ | EXTRACT(YEAR FROM d) | 2026 |
DATE_ADD(d, INTERVAL) | إضافة فترة زمنية | DATE_ADD(d, INTERVAL 7 DAY) | إضافة 7 أيام |
DATEDIFF(d1, d2) | حساب فرق الأيام d1 - d2 | DATEDIFF('2026-11-10','2026-11-01') | 9 |
TIMESTAMPDIFF(u,s,e) | حساب الفرق e - s بالوحدة | TIMESTAMPDIFF(HOUR, s, e) | عدد الساعات |
DATE_FORMAT(d, fmt) | تنسيق عرض التاريخ كنص | DATE_FORMAT(d, '%Y/%m/%d') | '2026/11/08' |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس دوال التوقيت الحالي NOW() وCURDATE()، واستخراج أجزاء التاريخ عبر EXTRACT()، وإضافة وطرح الفترات الزمنية بـ DATE_ADD() وDATE_SUB()، وحساب الفروق الزمنية بـ DATEDIFF() وTIMESTAMPDIFF()، وتنسيق عرض التواريخ بـ DATE_FORMAT().
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس السابع والثلاثين «التعبيرات الشرطية CASE و COALESCE وتحويل الأنواع CAST في MySQL» لبناء الشروط المنطقية وتحويل الأنواع داخل الاستعلامات.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Date Functions دوال التاريخ
- تعلّم دوال التاريخ والوقت وحساب الفروق الزمنية وتنسيقها في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Current Date and Time Functions دوال الوقت والتاريخ الحالي
- المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم دوال الوقت والتاريخ الحالي في MySQL 8.
- للمراجعة
- 03 Extracting Year Month and Day استخراج أجزاء التاريخ EXTRACT
- المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم استخراج أجزاء التاريخ EXTRACT في MySQL 8.
- للمراجعة
- 04 Adding Intervals with DATE ADD إضافة وطرح الفترات الزمنية
- المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم إضافة وطرح الفترات الزمنية في MySQL 8.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 UTC UTC
- Coordinated Universal Time
- التوقيت العالمي المنسق القياسي الذي تعيده دالتا UTC_TIMESTAMP() و UTC_DATE() في MySQL.
- للمراجعة
- 02 ISO ISO
- ISO 8601 Date Format (YYYY-MM-DD)
- الصيغة القياسية العالمية للتواريخ (YYYY-MM-DD) المعتمدة داخلياً في MySQL.
- للمراجعة
- 03 SLA SLA
- Service Level Agreement
- اتفاقية مستوى الخدمة وتُقاس مدة الاستجابة فيها عبر دالة TIMESTAMPDIFF.
- للمراجعة
- 04 DST DST
- Daylight Saving Time
- التوقيت الصيفي الموسمي الذي تتجنب قواعد البيانات مشاكله عبر اعتماد التوقيت العالمي UTC.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ استعلامات SQL المشروحة في قسم دوال الوقت والتاريخ الحالي داخل قاعدة بيانات MySQL 8 المحلية وتأكد من مطابقة النتائج.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم استخراج أجزاء التاريخ EXTRACT وقارن مخرجات الاستعلام.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
أي دالة في MySQL تعيد التاريخ الحالي فقط بصيغة "YYYY-MM-DD" دون جزء الساعات والدقائق؟
تعيد دالة CURDATE() التاريخ الحالي فقط دون الوقت.
ما هي القيمة التي تعيدها الدالة EXTRACT(YEAR FROM "2026-11-08") في MySQL؟
تستخرج الدالة جزء السنة الرباعية فتكون النتيجة 2026.
أي تعبير مما يلي يضيف 15 يوماً بشكل صحيح إلى عمود التاريخ order_date في MySQL؟
الصيغة القياسية لإضافة فترة زمنية هي DATE_ADD(order_date, INTERVAL 15 DAY).
ما هي نتيجة الاستعلام SELECT DATEDIFF("2026-11-15", "2026-11-05"); في MySQL؟
تحسب دالة DATEDIFF الفرق بطرح التاريخ الثاني من الأول بالأيام فتكون النتيجة 10.
تتجاهل دالة DATEDIFF(expr1, expr2) جزء الساعات والدقائق وتحسب الفرق بين جزأي التاريخ فقط بالأيام.
صواب؛ تعتمد DATEDIFF على جزء التاريخ فقط، ولحساب الساعات والدقائق نستخدم TIMESTAMPDIFF.
في دالة DATE_FORMAT، ما هما رمزا التنسيق لعرض السنة من 4 أرقام والشهر من رقمين؟
يرمز %Y للسنة من 4 أرقام، ويرمز %m لرقم الشهر من خانتين (01..12).
تعيد الدالة LAST_DAY("2026-02-10") التاريخ "2026-02-28" الذي يمثل آخر يوم في ذلك الشهر تلقائياً.
صواب؛ تستخرج دالة LAST_DAY تاريخ آخر يوم في الشهر بدقة.
ما هما الدالتان اللتان تعيدان الطابع الزمني الحالي بالتوقيت المحلي للجلسة أو بالتوقيت العالمي UTC؟ (اختر إجابتين)
تعيد NOW() التوقيت الحالي للجلسة وتعيد UTC_TIMESTAMP() التوقيت العالمي المنسق.