获取oracle日期

获取oracle日期,oracle,datetime,oracle11g,Oracle,Datetime,Oracle11g,我要找出最接近早上7点的约会。可以是今天(如果是上午00-07点)或明天(如果是上午07-12点)。 是否有什么东西可以不使用if语句“内联”执行此操作?如果时间

我要找出最接近早上7点的约会。可以是今天(如果是上午00-07点)或明天(如果是上午07-12点)。
是否有什么东西可以不使用
if
语句“内联”执行此操作?

如果时间<07:00,这将为您提供今天或明天的信息

trunc(sysdate+17/24)
trunc删除日期的时间部分。
17/24将当前时间增加17小时

您可以在截断日期之前调整日期;使用一些假的
sdate
值代替真实的
sysdate

alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS';

with t as (
    select to_date('01/02/2013 00:00:00') as sdate from dual
    union all select to_date('01/02/2013 06:59:59') from dual
    union all select to_date('01/02/2013 07:00:00') from dual
    union all select to_date('01/02/2013 07:00:01') from dual
    union all select to_date('01/02/2013 23:59:59') from dual
    union all select to_date('02/02/2013 00:00:00') from dual
)
select sdate,
    trunc(sdate + interval '17' hour) + interval '7' hour
from t
order by sdate;

SDATE               TRUNC(SDATE+INTERVA
------------------- -------------------
01/02/2013 00:00:00 01/02/2013 07:00:00
01/02/2013 06:59:59 01/02/2013 07:00:00
01/02/2013 07:00:00 02/02/2013 07:00:00
01/02/2013 07:00:01 02/02/2013 07:00:00
01/02/2013 23:59:59 02/02/2013 07:00:00
02/02/2013 00:00:00 02/02/2013 07:00:00
因此,
trunc(sysdate+interval'17'hour)
将为您提供今天的午夜(如果是在07:00:00之前),以及明天的午夜(如果是07:00:00或更晚);然后,
+间隔“7”小时
将第一次决定的日期定为07:00:00

你可以用
+17/24
+7/24
代替间隔,但我认为间隔更容易让人以后理解

这假设如果您运行它的时间正好是07:00:00,那么它将计为明天;如果这是错误的,那么您可以调整一秒钟:

with t as (
    select to_date('01/02/2013 00:00:00') as sdate from dual
    union all select to_date('01/02/2013 06:59:59') from dual
    union all select to_date('01/02/2013 07:00:00') from dual
    union all select to_date('01/02/2013 07:00:01') from dual
    union all select to_date('01/02/2013 23:59:59') from dual
    union all select to_date('02/02/2013 00:00:00') from dual
)
select sdate,
    trunc(sdate + interval '16:59:59' hour to second) + interval '7' hour
from t
order by sdate;

SDATE               TRUNC(SDATE+INTERVA
------------------- -------------------
01/02/2013 00:00:00 01/02/2013 07:00:00
01/02/2013 06:59:59 01/02/2013 07:00:00
01/02/2013 07:00:00 01/02/2013 07:00:00
01/02/2013 07:00:01 02/02/2013 07:00:00
01/02/2013 23:59:59 02/02/2013 07:00:00
02/02/2013 00:00:00 02/02/2013 07:00:00

你可以用一个case语句来表示这个no?我想在{}中使用一些schema.api_func.func(param1,param2,param3,{trunc(sysdate)+7/24}我想用尽可能最简单的句子,只要你知道这一点就行了。所以现在我很困惑你们到底在问什么。谢谢你们的回答,所以如果我想知道时间应该是:trunc(sysdate+17/24)+7/24真的?感谢alltrunc(sdate+间隔'17'小时)+间隔'7'小时这是我要找的,感谢这段代码与oracle版本兼容吗?(=它能在10g上运行吗?@ondrotadanai-它至少能工作到9i;不确定何时添加了间隔。