sql - 在 Oracle、PostgreSQL 和 SQL Server 中比较时间戳的常用方法

标签 sql oracle datetime postgresql

我正在编写一个 SQL 查询,其中涉及查找时间戳是否落在特定的日期范围内。

我已经在 PostgreSQL 中编写了它,但它在 Oracle 和 SQL Server 中不起作用:

AND creation_date < (CURRENT_TIMESTAMP - interval '5 days')
AND creation_date >= (CURRENT_TIMESTAMP - interval '15 days')

是否有通用的方法来比较不同数据库的时间戳?

最佳答案

我不是 SQL Server 专家,但我知道这适用于 Oracle 和 Postgres,我怀疑它可能适用于 MSSQL,但无法在 ATM 上对其进行测试。

AND creation_date < (CURRENT_TIMESTAMP - interval '5' day)
AND creation_date >= (CURRENT_TIMESTAMP - interval '15' day)

或者,如果您使用的是日期类型而不是时间戳,您可以这样做,但我很确定它不适用于 MSSQL。并且 DATE 类型在 Oracle 和 Pg 之间有很大的不同。

AND creation_date < CURRENT_DATE - 5
AND creation_date >= CURRENT_DATE - 15

如 OMG Ponies 的评论中所述,您只能将整数添加到日期类型,而不是时间戳。 (Oracle 默默地将时间戳转换到日期)

关于sql - 在 Oracle、PostgreSQL 和 SQL Server 中比较时间戳的常用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2505382/

相关文章:

sql - MySQL:基于条件的值

oracle - 使用自定义数据创建 Oracle Docker 镜像

Oracle 软件包规范和正文

datetime - ElasticSearch-按日期进行范围过滤不起作用,

mysql - 具有动态 group by 子句的 MySQL 查询应该是什么?

mysql - SQL日志数据库设计

oracle - 在 PL-SQL block 中声明和使用 PROCEDURE

c# - 循环开始到结束时间跨度过夜

php - 如何从周数、天数和年份中获取日期?

Mysql:将 tinyint 列与 varchar 值进行比较