با استفاده از تابع TO_DAYS تعداد روز بین ستون order_date و تاریخ امروز برای هر رکورد جدول orders محاسبه کنید و فقط رکوردهایی که بیش از 30 روز از تاریخ سفارش گذشته‌اند نمایش دهید.

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:55

0.0

برای حل این مسئله در MySQL از تابع TO_DAYS روی ستون order_date و روی CURDATE() استفاده کنید و تفاوت دو مقدار را محاسبه کنید، مثلاً: SELECT *, TO_DAYS(CURDATE()) - TO_DAYS(order_date) AS days_elapsed FROM orders WHERE TO_DAYS(CURDATE()) - TO_DAYS(order_date) > 30; توجه داشته باشید که order_date باید از نوع DATE یا DATETIME باشد و برای کارایی بهتر می‌توانید به‌جای اعمال تابع روی ستون از مقایسه مستقیم با DATE_SUB(CURDATE(), INTERVAL 30 DAY) استفاده کنید (مثال: WHERE order_date

توسط پژوهشگر در 220 روز قبل ساعت 01:55
دسته بندی ها: MySQL MySQL for beginner
sara در 220 روز قبل ساعت 11:34

استفاده از TO_DAYS روی ستون order_date ممکن است منجر به اسکن کامل جدول و از دست رفتن کارایی اندیس‌ها شود. برای کارایی بهتر، شرط را با DATE_SUB(CURDATE(), INTERVAL 30 DAY) مقایسه کنید: WHERE order_date < DATE_SUB(CURDATE(), INTERVAL 30 DAY). این روش با ستون‌های DATE یا DATETIME سازگار است و مرجع تاریخ امروز را با CURDATE() به درستی در نظر می‌گیرد. اگر همچنان می‌خواهید تفاوت را با TO_DAYS نمایش دهید، می‌توانید در خروجی days_elapsed = TO_DAYS(CURDATE()) - TO_DAYS(order_date) بدهید، اما از منظر کارایی معمولاً فیلتر مبتنی بر تاریخ مبنا مناسب‌تر است.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری