比较Oracle,PostgreSQL和SQL Server中的时间戳的常用方法

Pra*_*arg 19 sql oracle postgresql datetime

我正在编写一个SQL查询,它涉及查找时间戳是否落在特定的天数范围内.

我在PostgreSQL中写过,但它在Oracle和SQL Server中不起作用:

AND creation_date < (CURRENT_TIMESTAMP - interval '5 days')
AND creation_date >= (CURRENT_TIMESTAMP - interval '15 days')
Run Code Online (Sandbox Code Playgroud)

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

Sco*_*ley 17

我不是SQL Server专家,但我知道这适用于Oracle和Postgres,我怀疑它可能适用于MSSQL,但无法测试它的ATM.

AND creation_date < (CURRENT_TIMESTAMP - interval '5' day)
AND creation_date >= (CURRENT_TIMESTAMP - interval '15' day)
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用日期类型而不是时间戳,您可以这样做,但我很确定它不适用于MSSQL.而Oracle和Pg之间的DATE类型则截然不同.

AND creation_date < CURRENT_DATE - 5
AND creation_date >= CURRENT_DATE - 15
Run Code Online (Sandbox Code Playgroud)

正如OMG Ponies的评论中所指出的,您只能在日期类型中添加内注而不是时间戳.(Oracle默默地将时间戳转换为日期)


Eri*_*ski 7

如何比较postgresql中的两个时间戳,以下返回true:

select to_timestamp('2010-01-01 10:10:85.123', 'YYYY-MM-dd HH:MI:SS.MS') <
    to_timestamp('2012-01-01 10:10:85.123', 'YYYY-MM-dd HH:MI:SS.MS');
Run Code Online (Sandbox Code Playgroud)

返回true,因为它2012位于.之后2010