从mySQL的mmyy列中选择所有过期的信用卡日期

时间:2018-06-28 06:30:21

标签: mysql

如果我在mySQL中有一个名为cc_expire的列,其条目的格式为mmyy,那么我该如何选择/仅查询mmyy值等于下个月的记录?

例如,如果我们当前的mmyy = 0618,我想返回所有0718及更高版本的条目。

此外,由于返回的记录应该等于0119或更高,我如何计算下一年(如mmyy = 1218)?

建议?

2 个答案:

答案 0 :(得分:3)

使用STR_TO_DATEcc_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');

Demo

注意:这可以回答您的问题,但是如果您为信用卡到期日期存储正确的日期,则从长远来看会更好。

答案 1 :(得分:0)

您可以使用CURDATE docSUBSTRING docCONCAT 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)而导致的问题。请检查您对此问题的假设。