MySQL 将自定义格式的日期与现在进行比较

标签 mysql date

我在 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/

相关文章:

mysql - 与聚合数据的 SQL 连接

sql - 如何为 DateDiff 动态传入 date_or_time_part?

sql - 按跨年的日期范围(同一月和同一天)过滤

javascript - javascript + angularjs 中的开始和停止时间

mysql - 使用 MySQL 改进查找模糊重复项

PHP MySQL 获取打印帮助

mysql - 重命名/var/lib/mysql中的数据库文件

php - 获取表中特定行的数据 - Laravel 5.2

javascript - 使用 Javascript 验证日期输入

javascript - 将小时添加到新日期仅显示 NaN