كيفية استخدام القيمة التي تم إرجاعها من DATE_FORMAT () في جزء العمود من عبارة SELECT

0

يحتوي الجدول على 8 أعمدة ، doctor_id والأسماء السبعة الأخرى المسماة بأسماء الأسبوع (السبت ، الشمس ، ..) إذا تم جدولة الطبيب (على سبيل المثال: id = 1) في يوم (على سبيل المثال: sat) في (على سبيل المثال: 10:00:00) سيتم إدراجه على النحو التالي:

INSERT INTO doctors_schedule (doctor_id, sat) VALUES (1,"10:00:00");

سيتم تشغيل مشغل كل يوم في وقت محدد للحصول على جدول اليوم ، وسيستخدم هذا الاستعلام فيه:

SELECT doctor_id, DATE_FORMAT(NOW(), "%a")
FROM doctors_schedule
WHERE DATE_FORMAT(NOW(), "%a") IS NOT NULL;

لا يطرح هذا الاستعلام خطأ ، ولكنه يُرجع جميع السجلات دون أي عامل تصفية

2 الاجابة

1
افضل جواب

لا يمكنك تحديد أسماء الأعمدة بشكل ديناميكي مثل ذلك. DATE_FORMAT سيعيد قيمة سلسلة ، وليس اسم عمود. شيء من هذا القبيل قد يعمل بالرغم من ذلك.

SELECT doctor_id, COALESCE(`Sun`, `Mon`, ... ) AS timeOfDay
FROM doctors_schedule
WHERE CASE DATE_FORMAT(NOW(), '%a') 
           WHEN 'Sun' THEN `Sun`
           WHEN 'Mon' THEN `Mon`
           ... and so on
      END IS NOT NULL

COALESCE تُرجع أول قيمة غير فارغة في قائمتها ؛ إذا كانت حقول "اليوم" تحتوي على سلاسل فارغة بدلاً من القيم الخالية ، فيمكنك ذلك COALESCE(NULLIF(Sun, ''), NULLIF(Mon, ''), ...) AS timeOfDay ، أو استخدم حالة مشابهة لتلك الموجودة في WHERE (في الواقع ، متطابقة باستثناء IS NOT NULL جزء بعده.)

:مؤلف
0

إذا لم أكن مخطئًا ، فسيؤدي هذا إلى إرجاع قيمة فارغة دائمًا لأنك تقوم بالتصفية في الوقت الحالي لعدم كونها فارغة

> SELECT doctor_id FROM doctors_schedule WHERE DATE_FORMAT(NOW(), "%a")
> IS NOT NULL;

هذا هو الفلتر الخاص بك: تنسيق التاريخ الحالي حيث currentdate منسق is not null

بدلا من NOW() استخدم عمود التاريخ الخاص بك

:مؤلف
فوق
قائمة طعام