【问题标题】:Losy comparison between dates日期之间的有损比较
【发布时间】:2016-10-10 00:03:03
【问题描述】:

有没有一种方法可以让 MySQL 返回 1 而不是 0 for SELECT NOW() = '2016-10-10' 而无需强制转换 (CAST('2016-10-10' AS DATE)) 或转换为日期 (DATE('2016-10-10'))。

我的真实案例场景是DATEDATETIME 列之间的比较。我想在这些列上JOIN,但这只有在我可以让 MySQL 只比较日期而忽略时间的情况下才有可能。

我无法进行转换/转换,因为那非常昂贵 (Slow query performance left joining a view)。

【问题讨论】:

    标签: mysql date datetime comparison


    【解决方案1】:

    您需要转换的不是'2016-10-10' 字符串(因为它是valid date literal),而是NOW()

    NOW() 返回您当前的时间戳,包括小时、分钟和秒。而'2016-10-10' 被解释为'2016-10-10 00:00:00'。其中,大概不等于当前时间。

    所以

    SELECT DATE(NOW()) = '2016-10-10'
    

    UPD

    我可以让 MySQL 只比较日期,而忽略时间。

    对于比较coldate = coldatetime,您可以比较范围,例如:

    coldate <= coldatetime AND coldate + INTERVAL 1 DAY > coldatetime
    

    根据您的实际情况,它可能有益也可能无益。

    【讨论】:

    • 确实,我解释得很糟糕,铸件在等号的左侧。但请重新阅读我的问题的第二部分。
    猜你喜欢
    • 2018-06-18
    • 2023-04-06
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多