با استفاده از تابع TO_DAYS در MySQL، یک پرسوجو بنویسید که شناسه سفارش (order_id) و تعداد روزهای گذشته از تاریخ سفارش (order_date) تا امروز را از جدول orders نمایش دهد.
11.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:54 0.0
برای حل این مسئله میتوانید از تفاضل دو مقدار TO_DAYS(CURDATE()) و TO_DAYS(order_date) استفاده کنید، مثلاً: SELECT order_id, TO_DAYS(CURDATE()) - TO_DAYS(order_date) AS days_passed FROM orders; مطمئن شوید ستون order_date از نوع DATE یا DATETIME است و اگر ممکن است مقادیر NULL داشته باشد از WHERE order_date IS NOT NULL یا COALESCE استفاده کنید؛ همچنین برای جلوگیری از نتایج منفی در صورت تاریخهای آینده میتوانید فیلتر اضافه کنید یا از GREATEST(...,0) استفاده کنید. در صورت نیاز یادآوری: تابع TO_DAYS مقدار عددی روزها را برمیگرداند و برای مقایسه روزها مناسب است ولی برای خوانایی بیشتر میتوان از DATEDIFF(CURDATE(), order_date) نیز بهره برد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای ایمنی بیشتر، اگر order_date ممکن است NULL باشد از COALESCE استفاده کنید یا با فیلتر کردن از نتایج NULL جلوگیری کنید. برای جلوگیری از نتایج منفی میتوانید از GREATEST(DATEDIFF(CURDATE(), DATE(order_date)), 0) استفاده کنید تا روزها همیشه غیرمنفی بماند. همچنین داشتن ایندکس مناسب روی ستون order_date به بهبود عملکرد پرسوجو کمک میکند. اگر میخواهید فقط سفارشهایی که تا امروز ثبت شدهاند را ببینید، شرط order_date <= CURDATE() اضافه کنید. در نهایت استفاده از DATEDIFF(CURDATE(), DATE(order_date)) خواناتر از TO_DAYS(CURDATE()) - TO_DAYS(order_date) است.
گزارش