我在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 - MySQL比较自定义格式的日期到现在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38503765/

10-11 01:20