English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

التاريخ والوقت SQL

في هذا الدرس، ستتعلم كيفية استخدام التواريخ والوقت في SQL.

معالجة التاريخ والوقت

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

تُسمى هذه النوع من البيانات ببيانات مؤقتة، ويكون لدي كل محرك قاعدة البيانات نموذج التخزين الافتراضي ونوع البيانات المستخدم لتحفظ هذه البيانات. يوضح الجدول أدناه أنواع البيانات الخاصة بقاعدة بيانات MySQL التي تدعم معالجة التواريخ والوقت.

النوعالنمط المسبقالقيم المسموح بها
DATEYYYY-MM-DD1000-01-01 - 9999-12-31
TIMEHH:MM:SS أو HHH:MM:SS-838:59:59 - 838:59:59
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 - 9999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 - 2037-12-31 23:59:59
YEARYYYY1901 - 2155

تنطبق نموذج قيمة DATE على YYYY-MM-DD، حيث يمثل YYYY السنة الكاملة (رقم من أربعة أرقام)، وMM وDD يمثلان جزء الشهر واليوم من التاريخ (رقمان بيانيان). عادةً ما تستخدم قيم الوقت نموذج HH:MM:SS، حيث يمثل HH جزء الساعة، وMM جزء الدقيقة، وSS جزء الثانية.

توضح الجملة التالية كيفية إدراج قيم تاريخية في جدول قاعدة البيانات:

INSERT INTO employees (emp_name, hire_date, salary)
VALUES ('Adam Smith', '2015-06-24', 4500);

ملاحظة:في MySQL، قد تكون قيمة جزء الساعة أكبر لأن MySQL تعتبرها وقت تشغيل. هذا يعني أن بيانات نوع الوقت يمكن استخدامها ليس فقط لتمثيل وقت معين في اليوم (يجب أن يكون أقل من 24 ساعة)، بل أيضًا لتمثيل فترة زمنية بين حدثين، قد تزيد عن 24 ساعة، وقد تكون سالبة.

تتبع وقت إنشاء أو تعديل السطر

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

في MySQL، يمكنك استخدام دالة NOW() لإدراج توقيت الشهادة الحالية، مثلما هو موضح أدناه:

-- لغة قاعدة بيانات MySQL
INSERT INTO users (name, birth_date, created_at)
VALUES ('Bilbo Baggins', '1998-04-16', NOW());

لكن إذا لم تكن ترغب في إدخال التاريخ والوقت الحاليين يدويًا، يمكنك استخدام الخاصية التلقائية لتحديث وتحديث أنواع TIMESTAMP وDATETIME.

لتحديد الخاصية التلقائية، قم بتحديد جملة DEFAULT CURRENT_TIMESTAMP وON UPDATE CURRENT_TIMESTAMP في تعريف العمود، مثلما هو موضح أدناه:

-- لغة قاعدة بيانات MySQL
CREATE TABLE users (
    id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE,
    birth_date DATE NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

ملاحظة:التحديث التلقائي والتحديث التلقائي لبيانات نوع DATETIME، متاح فقط في إصدار MySQL 5.6.5 أو أعلى. إذا كنت تستخدم إصدارًا قديمًا، استخدم TIMESTAMP.

استخراج جزء من التاريخ أو الوقت

في بعض الحالات، قد تريد فقط الحصول على جزء من التاريخ أو الوقت. في MySQL، يمكنك استخدام دوال مخصصة لتقسيم جزء من القيمة الزمنية، مثل YEAR()، MONTH()، DAYOFMONTH()، MONTHNAME()، DAYNAME()، HOUR()، MINUTE()، SECOND()، إلخ.

هذه الجملة SQL ستحصل على جزء السنة من قيمة birth_date، مثل إذا كان عيد ميلاد أي عميل هو 1987-01-14، فإن YEAR(birth_date) سيقوم بالرجوع إلى 1987.

mysql> SELECT name, YEAR(birth_date) FROM users;

بالنسبة لنفس الشيء، يمكنك استخدام دالة DAYOFMONTH() للحصول على يوم من الشهر، مثل إذا كان تاريخ الميلاد للعميل أي كان 1986-10-06، فإن DAYOFMONTH(birth_date) سيقوم بالرجوع إلى 6.

mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;

تنسيق التاريخ أو الوقت

إذا كنت ترغب في استخدام تنسيق تاريخ ووقت أكثر وضوحًا في نتائج الاستعلام، يمكنك استخدام دوال DATE_FORMAT() و TIME_FORMAT() لإعادة تنسيق القيم الحالية للتاريخ والوقت.

سيتم تعيين هذا جملة SQL بتنسيق أكثر وضوحًاusersفي الجدولbirth_dateتنسيق قيمة العمود، مثل من 14 يناير 1987 إلى 14 يناير 1987.

mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;