在 MySQL 中比较日期时,将 31 用于“本月的最后一天”是否安全

d.r*_*aev 3 mysql

我知道这不是完美的方法,但是在比较MySQL和其他数据库中的日期以仅用Y-m-31作本月的最后一天时是否存在问题?

例如

SELECT * FROM orders WHERE date > 2015-02-01 AND date < 2015-02-31

cee*_*yoz 5

您可以LAST_DAY()为此使用 MySQL函数:

SELECT * FROM orders WHERE date >= '2015-02-01' AND date <= LAST_DAY('2015-02-01')
Run Code Online (Sandbox Code Playgroud)

(您可能还想要>=<=不是排除每个月的第一天/最后一天)

  • @d.raev 您的代码可能会在某些服务器上失败 - 有一些标志可以启用严格的日期检查,这些标志会将无效日期转换为“0000-00-00”,从而导致您始终返回零行。如果您完全、永久地控制服务器,它看起来很安全 - 在我的 MySQL 安装中,MySQL 似乎将 `2015-07-50` 处理为 `2015-07-31`(我很好奇它是否会结束为`2015-08-19`或其他)。 (3认同)