Вопрос

Эй, ребята, я просто пытаюсь вытащить все записи из моей базы данных, у которых есть 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 ().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top