修改SYSDATE功能

时间:2017-06-09 20:43:32

标签: sql

在我的一个SQL查询中,我正在使用

[... and z.READ_TIMESTAMP > TIMESTAMP_TO_EPOCH(TRUNC(SYSDATE-3)]

如果我希望日期正好是2017年5月31日,我会使用' SYSDATE' (date-n)函数还是其他一些表达式?或如何修改我的查询5/31/2017

1 个答案:

答案 0 :(得分:0)

如果您希望日期恰好是5/31/2017,请使用 TO_DATE() TO_TIMESTAMP() ,具体取决于您需要的数据类型(日期或时间戳)。当您使用SYSDATE时,日期数据类型应该有效。

-- e.g.
select
      to_date('5/31/2017','mm/dd/yyyy')
    , to_timestamp('5/31/2017','mm/dd/yyyy')
from dual

...
and z.READ_TIMESTAMP > TIMESTAMP_TO_EPOCH(to_date('5/31/2017','mm/dd/yyyy'))

<强>无论其

我怀疑你可能想要的不仅仅是建立固定日期的方法。例如,您是否要求“我如何获得上个月的最后一天?”也许可以通过使用&gt; =以及当月的第一天来满足:

...
and z.READ_TIMESTAMP >= TIMESTAMP_TO_EPOCH(trunc(sysdate,'MM'))

或者如果确实是上个月的最后一天,可以通过 LAST_DAY() ADD_MONTHS()

and z.READ_TIMESTAMP > 
TIMESTAMP_TO_EPOCH( last_day(add_months(trunc(sysdate,'MM'),-1)) )

如果您不太了解数据的性质和查询目的,请注意您在“截断”时使用的每个日期也将时间设置为00:00:000 - 因此如果数据包含时间除了00:00:00之外的那一天,这两个查询可能不会产生相同的结果

.... datetimecolumn > to_date('05/31/2017','mm/dd/yyyy') -- "a"

.... datetimecolumn >= to_date('06/01/2017','mm/dd/yyyy')  -- "b"

例如,“a”整个24小时的持续时间05/31/2017将包含在结果中,但例如“b”,相同的24小时持续时间将被排除在结果之外。根据我的经验,任何月份的最后一天并不是查找基于日期/时间的数据的最佳方法,而通常是下个月的第一天产生正确的结果。