0

嘿伙计们,我只是想从我的数据库中提取所有记录,这些记录的 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'

我显然做错了什么,所以你能帮忙吗?

4

2 回答 2

0

正确的方法 - 是以正确的字段类型存储数据。使用“日期”类型而不是“varchar”。

无论如何 - 您可以使用 DATE_FORMAT 将 rec_date 格式化为 WHERE 子句中的字符串,并将其与 CURDATE() 进行比较。

于 2010-03-15T03:57:45.733 回答
0

我同意 zerkms 的观点,即应尽可能使用适当的数据类型。否则,您必须先使用子查询将 string/varchar 转换为 DATE/TIME 数据类型:

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()
于 2010-03-15T04:07:08.100 回答