嘿伙计们,我只是试图从我的数据库中提取所有记录,其中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'
我显然做错了什么,你能帮忙吗?
答案 0 :(得分:0)
正确的方法 - 将数据存储在适当的字段类型中。使用“日期”类型而不是“varchar”。
无论如何 - 您可以使用DATE_FORMAT在WHERE子句中将rec_date格式化为字符串,并将其与CURDATE()进行比较。
答案 1 :(得分:0)
我同意zerkms应尽可能使用适当的数据类型。否则,您必须首先使用子查询将字符串/ 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()