داده های تاریخ و زمان در SQL:
مقدمه:
داده های تاریخ و زمان در SQL برای ذخیره اطلاعات مربوط به زمان و تاریخ، مانند تاریخ تولد، تاریخ انتشار یک مقاله، یا زمان شروع یک رویداد به کار میروند. این نوع داده ها از نظر دقت و نوع اطلاعات به دسته های مختلفی تقسیم میشوند.
انواع داده های تاریخ و زمان:
- Date: برای ذخیره تاریخ به صورت YYYY-MM-DD به کار میرود.
- Time: برای ذخیره زمان به صورت HH:MM:SS به کار میرود.
- Datetime: برای ذخیره تاریخ و زمان به صورت YYYY-MM-DD HH:MM:SS به کار میرود.
- Smalldatetime: برای ذخیره تاریخ و زمان به صورت YYYY-MM-DD HH:MM به کار میرود.
- Timestamp: برای ذخیره تاریخ و زمان به صورت YYYY-MM-DD HH:MM:SS.SSS به کار میرود.
نکاتی در مورد داده های تاریخ و زمان:
- دقت نوع داده Date در روز است، در حالی که دقت نوع داده Time در ثانیه است.
- نوع داده Datetime برای ذخیره تاریخ و زمان با دقت ثانیه به کار میرود.
- نوع داده Smalldatetime برای ذخیره تاریخ و زمان با دقت دقیقه به کار میرود.
- نوع داده Timestamp برای ذخیره تاریخ و زمان با دقت میلی ثانیه به کار میرود.
انتخاب نوع داده مناسب:
انتخاب نوع داده مناسب برای ذخیره تاریخ و زمان، به دقت مورد نیاز و کاربرد مورد نظر بستگی دارد.
مثال ها:
- ذخیره تاریخ تولد:
birthdate DATE
- ذخیره زمان شروع یک رویداد:
start_time TIME
- ذخیره تاریخ و زمان انتشار یک مقاله:
publication_datetime DATETIME
- ذخیره تاریخ و زمان ثبت یک سفارش:
order_timestamp TIMESTAMP
توابع تاریخ و زمان:
SQL Server توابع مختلفی برای کار با داده های تاریخ و زمان ارائه میدهد.
- GETDATE(): برای دریافت تاریخ و زمان فعلی سیستم به کار میرود.
- DATEADD(): برای اضافه کردن یک بازه زمانی مشخص به یک تاریخ یا زمان به کار میرود.
- DATEDIFF(): برای محاسبه اختلاف بین دو تاریخ یا زمان به کار میرود.
- DATENAME(): برای دریافت نام یک بخش از تاریخ یا زمان (مانند روز، ماه، سال) به کار میرود.
موارد استفاده دیگر:
- مقایسه تاریخ و زمان:
SELECT * FROM orders WHERE order_date > '2023-12-31'
- محاسبه سن:
SELECT DATEDIFF(YEAR, birthdate, GETDATE()) AS age FROM customers
- اضافه کردن یا کم کردن زمان:
SELECT DATEADD(HOUR, 1, start_time) AS end_time
نکته:
- اینها فقط چند نمونه از کاربردهای داده های تاریخ و زمان در SQL هستند.
- انتخاب نوع داده مناسب و استفاده از توابع تاریخ و زمان به شما کمک می کند تا اطلاعات مربوط به زمان و تاریخ را به طور دقیق و کارآمد ذخیره و پردازش کنید.
بسط و گسترش:
-
ذخیره تاریخ و زمان به صورت محلی:
SET DATEFORMAT dmy
SELECT order_date FROM orders
-
ذخیره تاریخ و زمان در منطقه زمانی خاص:
SELECT order_date AT TIME ZONE 'Asia/Tehran' FROM orders
-
استفاده از توابع تاریخ و زمان در دستورات SQL:
SELECT AVG(DATEDIFF(MINUTE, start_time, end_time)) AS average_duration FROM events
-
استفاده از توابع تاریخ و زمان در برنامه های کاربردی:
SELECT * FROM customers WHERE birthdate BETWEEN '1980-01-01' AND '1990-12-31'
مثال جامع از داده های تاریخ و زمان در SQL:
فرض کنید یک جدول به نام Orders
داریم که شامل ستون های زیر است:
order_id
: شناسه سفارش (عدد صحیح)customer_id
: شناسه مشتری (عدد صحیح)order_date
: تاریخ سفارش (تاریخ)order_time
: زمان سفارش (زمان)order_total
: مبلغ کل سفارش (عدد اعشاری)
در این مثال، می خواهیم:
- همه سفارشات را در تاریخ 1402/02/28 نمایش دهیم:
SQL
SELECT *
FROM Orders
WHERE order_date = '1402-02-28';
- میانگین مبلغ سفارشات را در 3 ماه گذشته محاسبه کنیم:
SQL
SELECT AVG(order_total) AS average_total
FROM Orders
WHERE order_date BETWEEN DATEADD(MONTH, -3, GETDATE()) AND GETDATE();
- مشتریانی که در 7 روز گذشته سفارش داده اند را پیدا کنیم:
SQL
SELECT customer_id
FROM Orders
WHERE order_date BETWEEN DATEADD(DAY, -7, GETDATE()) AND GETDATE();
- سفارشاتی که در 10 صبح تا 12 ظهر ثبت شده اند را پیدا کنیم:
SQL
SELECT *
FROM Orders
WHERE order_time BETWEEN '10:00:00' AND '12:00:00';
- 5 سفارش اخیر را بر اساس تاریخ و زمان سفارش نمایش دهیم:
SQL
SELECT *
FROM Orders
ORDER BY order_date DESC, order_time DESC
LIMIT 5;
نکات:
- در این مثال، از توابع تاریخ و زمان مختلفی مانند
GETDATE()
,DATEADD()
,DATEDIFF()
,BETWEEN
وORDER BY
استفاده شده است. - می توانید از این توابع در دستورات SQL خود برای کار با داده های تاریخ و زمان به روش های مختلف استفاده کنید.
مثال های دیگر:
- محاسبه سن یک مشتری:
SQL
SELECT DATEDIFF(YEAR, birthdate, GETDATE()) AS age
FROM Customers;
- اضافه کردن 30 دقیقه به زمان سفارش:
SQL
SELECT DATEADD(MINUTE, 30, order_time) AS new_time
FROM Orders;
- دریافت نام روز برای تاریخ سفارش:
SQL
SELECT DATENAME(dw, order_date) AS day_name
FROM Orders;