سؤال

يا شباب، أنا أحاول فقط سحب جميع السجلات من قاعدة البيانات الخاصة بي التي لديها rec_date (varchar) المخزنة ك M / D / Y وتنتهي (كما في، أقل من curdate())، هذه الدعوة لا تعطيني ما أريد:

SELECT member_id, 
       status, 
       DATE_FORMAT(STR_TO_DATE(rec_date, '%m/%d/%Y'), '%Y-%m-%d') AS rec
  FROM members 
 WHERE rec_date > CURDATE() 
   AND status = '1'

من الواضح أنني أفعل شيئا خاطئا، فهل يمكنك المساعدة؟

هل كانت مفيدة؟

المحلول

وأنا أتفق مع Zerkms التي يجب استخدام أنواع البيانات المناسبة كلما أمكن ذلك. خلاف ذلك، يجب عليك استخدام عملية استعداء لتحويل السلسلة / varchar إلى نوع بيانات التاريخ / الوقت أولا:

SELECT x.member_id,
       x.status,
       DATE_FORMAT(x.rec_dt, '%Y-%m-%d')
  FROM (SELECT m.member_id,
               m.status,
               STR_TO_DATE(m.rec_date, '%m/%d/%Y') AS rec_dt
          FROM MEMBERS m
         WHERE m.status = '1') x
 WHERE x.rec_dt < CURDATE()

نصائح أخرى

الطريق الصحيح - هو تخزين البيانات في نوع الحقل المناسب. استخدم "التاريخ" النوع بدلا من "varchar".

على أي حال - يمكنك استخدام date_format لتنسيق REC_DATE إلى السلسلة مباشرة في حيث جملة ومقارنتها للروع ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top