sysdate 差异(如何在 sysdate 和我的表日期之间进行查询)

Posted

技术标签:

【中文标题】sysdate 差异(如何在 sysdate 和我的表日期之间进行查询)【英文标题】:sysdate difference ( how to make query between sysdate and my table date) 【发布时间】:2015-12-19 13:39:46 【问题描述】:

我是 Oracle 新手。

我有一些问题要查询。

我正在尝试进行查询以解决 sysdate() 与我自己表中的日期之间的差异

select to_char(to_char(sysdate,'YYYYMMDDHH24MISS')   
        - to_char(S_DATE||S_HOUR||':00' , 'YYYYMMDDHH24MISS')) 
from dual;

我就是这么干的。

在我的表格中,我有两列 'S_DATE''S_HOUR',这意味着时间。

所以,我想知道时差以及如何进行此查询。 提前谢谢你。

【问题讨论】:

为什么不将您的日期存储为日期?那么不需要转换。只需减去两个值。刚接触 Oracle 的人通常不明白的一件事是日期。日期是时间点 - 所以日期和时间。始终将日期存储为日期,而不是数字或字符串。 您不能从另一个 varchar 中“减去”一个 varchar。您需要使用 real date 值。去掉 sysdate 上的 to_char() 并在表列上使用 to_date() 将它们转换为正确的 date 值。 【参考方案1】:

您可以通过简单的 -(减号)运算符获得两个日期之间的差异。但是首先您需要使用 TO_DATE 将日期字符串转换为日期。

SQL Fidlle 中的示例是here

示例查询:

select 
sysdate , S_DATE || ' ' || S_HOUR "Date",
round((sysdate - to_date(s_date || s_hour ,' YYYY/MM/DDHH24:MI') ) * 24 * 60, 2)  "Dif In Min",
round((sysdate - to_date(s_date || s_hour ,' YYYY/MM/DDHH24:MI') ) * 24 * 60 * 60, 2)  "Dif In Sec"
from myDate

【讨论】:

以上是关于sysdate 差异(如何在 sysdate 和我的表日期之间进行查询)的主要内容,如果未能解决你的问题,请参考以下文章

如何生成 sysdate-30 和 sysdate+30 之间的所有日期列表?

SYSDATE 和以 MM-DD 格式存储的日期之间的日期差异

oracle systimestamp (sysdate) 到毫秒

表中我的一天与服务器中的 sysdate 之间的比较

如何从oracle 11g中的另一个实例获取一个实例的sysdate

如何使用 to_date 函数转换复杂的 sysdate + 其他内容?