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

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

0.0

برای حل این مسئله از تابع TO_DAYS برای تبدیل تاریخ‌ها به عدد روز استفاده کنید و تفاوت را با تاریخ امروز مقایسه کنید؛ مثلاً WHERE TO_DAYS(CURDATE()) - TO_DAYS(order_date) > 30 یا معادل دیگر WHERE TO_DAYS(order_date) < TO_DAYS(CURDATE()) - 30. این کوئری در MySQL اجرا می‌شود و توجه داشته باشید که مقادیر NULL در order_date ممکن است نتیجه را تحت تأثیر قرار دهند؛ در صورت نیاز از شرط IS NOT NULL استفاده کنید یا از تابع DATEDIFF برای مقایسه مستقیم روزها بهره ببرید اما در این سوال الزامی است از TO_DAYS استفاده شود.

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

برای محاسبه تعداد روزهای گذشته از order_date تا امروز با TO_DAYS، تفاوت TO_DAYS(CURDATE()) و TO_DAYS(order_date) را محاسبه می‌کنیم. برای نمایش فقط ردیف‌هایی که بیش از 30 روز از تاریخ سفارششان گذشته است، از WHERE TO_DAYS(CURDATE()) - TO_DAYS(order_date) > 30 استفاده کنید یا معادل آن WHERE TO_DAYS(order_date) < TO_DAYS(CURDATE()) - 30. توجه کنید که مقادیر NULL در order_date می‌تواند نتیجه را باطل کند؛ بنابراین از ORDER_DATE IS NOT NULL استفاده کنید یا مقدار را با COALESCE مدیریت کنید. همچنین با وجود الزامی بودن استفاده از TO_DAYS، اجرای این سؤال روی دیتابیس بزرگ ممکن است از کارایی اندیس روی order_date جلوگیری کند، پس بهینه‌سازی با اندیس مناسب یا محدود کردن فیلترها پیشنهاد می‌شود.

گزارش

1 پاسخ

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

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