【问题标题】:Get mariadb to handle date searches like mysql (e.g. with date like 2020-12-32)让 mariadb 处理 mysql 之类的日期搜索(例如,日期为 2020-12-32)
【发布时间】:2021-04-29 10:05:34
【问题描述】:

使用 mysql 可以使用类似的 sql 查询搜索整月

select * from table where date_created >= '2020-12-01' and date_created <= '2020-12-32'

列 date_created 是日期时间类型。 这不适用于 mariadb。我知道日期 2020-12-32 无效。但是有可能使用 mariadb 来实现吗?

【问题讨论】:

  • "这不适用于 mariadb",这是理所当然的。每个自尊的数据库都会拒绝这一点。写&gt;= '2020-12-01' and date_create &lt; '2021-01-01'有什么问题?
  • 这是一个已有 15 年历史的 php 应用程序,拥有超过一百万行代码,在多个地方生成此类代码。由于它适用于变量和计算,因此很难找到这种丑陋方法使用的所有地方。因此,如果它也能与 mariadb 一起使用,那就太好了,所以我不必更改旧代码。

标签: datetime mariadb


【解决方案1】:

如果不修改您的代码或表定义,就无法使此语句生效:

由于date_created被定义为日期类型,因此where子句中的字符串在进行比较之前将被转换为日期。日期“2020-12-32”无效,将转换为“0000-00-00”,即where条件变为WHERE date_created &gt; 2020-12-01 and date_created &lt; 0000-00-00:因此该语句不会返回任何行。

然而有趣的是优化器并没有找出不可能的 WHERE 条件并且正在执行扫描。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2012-08-14
    • 2021-05-19
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多