当前位置: 首页 > 面试题库 >

MySQL中PostgreSQL的date_trunc

松灿
2023-03-14
问题内容

最近,我对PostgreSQL(使用8.2)非常熟悉,发现date_trunc函数对于轻松匹配某些天/月/等之间的时间戳非常有用。我认为,该功能的真正有用之处在于它可以将输出保持为时间戳格式

我不得不切换到mySQL(5.0)并找到一些日期功能,而这些功能在比较中是比较缺乏的。提取函数似乎很有用,我发现的日期函数解决了我的一些问题,但是有没有办法复制PostgreSQL的date_trunc?

以下是一个示例,该示例说明了我过去如何使用date_trunc将查询的时间戳与包括当前月份在内的最近4个月进行匹配,但前提是已经有一个星期进入了本月:

WHERE date_trunc('month', QUERY_DATE) BETWEEN 
    date_trunc('month', now()) - INTERVAL '4 MONTH' AND 
    date_trunc('month', now() - INTERVAL '1 WEEK')

我不知道如何在mySQL中重新创建这样的规定。所以,最后我的问题是,是否可以通过尝试复制date_trunc(以及如何)在mySQL中完成这种查询,或者是否需要以不同的方式开始研究这些类型的查询才能使它们工作在mySQL(以及有关如何做到这一点的建议)?


问题答案:

提取函数似乎很有用,我发现的日期函数解决了我的一些问题,但是有没有办法复制PostgreSQL的date_trunc?

确实,EXTRACT看起来这将是此特定情况下最接近的匹配项。

您在PG中的原始代码:

WHERE date_trunc('month', QUERY_DATE) BETWEEN 
    date_trunc('month', now()) - INTERVAL '4 MONTH' AND 
    date_trunc('month', now() - INTERVAL '1 WEEK')

使用EXTRACT

WHERE EXTRACT(YEAR_MONTH FROM QUERY_DATE)
      BETWEEN
          EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 4 MONTH)
      AND
          EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 1 WEEK)

尽管在功能上应该相同,但这实际上是在进行比较之前将日期整理为YYYYMM字符串。

另一种选择是使用DATE_FORMAT重建日期字符串并将其强制到月初:

WHERE DATE_FORMAT(QUERY_DATE, '%Y-%m-01')
      BETWEEN
          DATE_FORMAT(NOW() - INTERVAL 4 MONTH, '%Y-%m-01')
      AND
          DATE_FORMAT(NOW() - INTERVAL 1 WEEK, '%Y-%m-01')

另外,请注意,即使对字段进行了索引,MySQL在处理日期范围方面也确实很差。如果您不小心的话,最终可能会进行全表扫描。



 类似资料:
  • MySQL to PostgreSQL 可以将简单的 MySQL dump 文件转成 PostgreSQL 格式,会自动在装载数据后才创建索引,数据的加载使用 PostgreSQL 的 COPY 命令字节从 CSV 文件中装载。

  • DBConvert for MySQL & PostgreSQL 是一种可靠的双向定向数据库迁移工具,它可让您同步转换: MySQL to PostgreSQL MySQL to PostgreSQL Dump MySQL to PostgreSQL PHP Script MySQL to MySQL MySQL to MySQL Dump MySQL to MySQL PHP Script Po

  • 问题内容: 刚从MySQL首次尝试PostgreSQL。在我们的Rails应用程序中,我们有几个使用SQL的位置,如下所示: 很快就发现PostgreSQL不支持/不允许这样做。 有谁知道如何在PostgreSQL中模拟这种行为,还是我们必须将排序整理到代码中? 问题答案: 啊,gahooa太近了:

  • 问题内容: 在MySQL上,是否存在POSTGRESQL中的“ unnest”之类的功能? 查询(PSQL): 结果(如表所示): 问题答案: 简短答案 对的,这是可能的。从技术角度来看,您可以通过一个查询来实现。但是问题是-最有可能的是,您正在尝试将一些逻辑从应用程序传递到数据存储。数据存储旨在 存储 数据,而不是表示/格式化数据,或者甚至对其应用某些逻辑。 是的,MySQL没有数组数据类型,但

  • 原文档:Vert.x MySQL/PostgreSQL client 此异步 MySQL/PostgreSQL 客户端给需要与 MySQL 或 PostgreSQL 数据库交互的 Vert.x 应用提供了相应的接口。 Vert.x MySQL/PostgreSQL Client(以下简称客户端)底层实现基于 Mauricio Linhares 写的异步驱动 postgresql-async。此组件

  • 问题内容: 我想在MySQL中获得类似于PostgreSQL中EXPLAIN ANALYZE所示的详细查询计划。有等同的吗? 问题答案: 编辑:虽然不是直接等效项,也不像解释分析那样详细,但是您可以查看一些工具 mysql提供EXPLAIN和过程analyse() http://dev.mysql.com/doc/refman/5.0/en/explain.html http://dev.mysq