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 для строки прямо в предложении, и сравнить его с curdate ().