MySQL Date_Format مقارنة ل curdate () الاستعلام
-
20-09-2019 - |
سؤال
يا شباب، أنا أحاول فقط سحب جميع السجلات من قاعدة البيانات الخاصة بي التي لديها 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 إلى السلسلة مباشرة في حيث جملة ومقارنتها للروع ().
لا تنتمي إلى StackOverflow