如果我在mySQL中有一个名为cc_expire的列,其条目的格式为mmyy,那么我该如何选择/仅查询mmyy值等于下个月的记录?
例如,如果我们当前的mmyy = 0618,我想返回所有0718及更高版本的条目。
此外,由于返回的记录应该等于0119或更高,我如何计算下一年(如mmyy = 1218)?
建议?
答案 0 :(得分:3)
使用STR_TO_DATE
在cc_expire
列之外建立一个真实日期。为此,我们可以假设每个日期都是该月的第一天。然后,将每个信用卡记录与下个月的第一天进行比较。
SELECT *
FROM yourTable
WHERE
STR_TO_DATE(CONCAT('01', cc_expire), '%d%m%Y') >=
DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01');
注意:这可以回答您的问题,但是如果您为信用卡到期日期存储正确的日期,则从长远来看会更好。
答案 1 :(得分:0)
您可以使用CURDATE
doc,SUBSTRING
doc和CONCAT
doc构建查询。
对于第一个问题,请选择所需的当前日期部分:
WHERE cc_expire = CONCAT(SUBSTRING(CURDATE(), 5, 2), SUBSTRING(CURDATE(), 2, 2))
对于第二个问题,必须对日期进行分解,并分两步检查当前年份(与月份相关)和未来年份。
where SUBSTRING(cc_expire, 2, 2) > SUBSTRING(CURDATE(), 2, 2) # year is larger
OR (SUBSTRING(cc_expire, 2, 2) = SUBSTRING(CURDATE(), 2, 2) # year is equal
AND SUBSTRING(cc_expire, 0, 2) > SUBSTRING(CURDATE(), 5, 2))
请注意,我明确忽略了由于年份只有2个数字(即\ @,99 < 05
)而导致的问题。请检查您对此问题的假设。