我在 mysql 中的 varchar 列中,日期以 d/m/Y 格式存储,认为旧的输入只有 m/Y。
我有一个查询来选择最旧的记录:
SELECT expire
FROM logs
WHERE log_id = :logid AND STR_TO_DATE(expire, '%d/%m/%Y') > NOW()
ORDER BY STR_TO_DATE(expire, '%d/%m/%Y') ASC LIMIT 0,1"
但是,如果数据库中日期以旧格式存储而没有“d”(如 m/Y),则不会返回任何内容,我如何返回带有 AND 而不带有 d 的行?
最佳答案
您可以检查str的长度
SELECT expire
FROM logs
WHERE log_id = :logid
AND CASE length(expire)
WHEN 10 THEN STR_TO_DATE(expire, '%d/%m/%Y') > NOW()
WHEN 7 THEN STR_TO_DATE(expire, '%m/%Y) > NOW()
END
ORDER BY STR_TO_DATE(expire, '%d/%m/%Y') ASC LIMIT 0,1;
关于MySQL 将自定义格式的日期与现在进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38503765/