Oracle SQL:
我一直试图让这个查询片段正常工作。当您运行它时,它会提示您一个小时,并且不显示任何记录。我不希望查询有一个静态小时,因为它需要每天运行4次。 因此,从'& date'输入,我希望它显示过去24小时的数据。这可能吗?
dt_time = timestamp(6) field
select distinct to_char(dt_ time,'dd/mm/yyyy hh24'), fault_description
from order
where to_char(dt_time,'hh24') <= '&date' -24
order by to_char(dt_ time,'dd/mm/yyyy hh24');
例如,如果输入10(执行查询时),它将在第二天显示从10(:00)到10(:00)的数据
[希望有足够的信息让某人回答,请]
答案 0 :(得分:0)
使用between
和interval
的组合:
where dt_time between
to_date(&date, 'ddmmyyyy hh24') and
to_date(&date, 'ddmmyyyy hh24') + interval '24' hour
您需要将输入日期作为完整日期传递/解析,而不仅仅是小时部分,以防止意外结果。
答案 1 :(得分:0)
您可以在CTE中使用NUMTODSINTERVAL
来获取用户输入的小时数。
WITH t_hour( h ) AS
( SELECT NUMTODSINTERVAL(&d,'HOUR' ) h FROM DUAL
)
SELECT DISTINCT TO_CHAR(dt_time,'dd/mm/yyyy hh24'),
fault_description
FROM ORDER
CROSS JOIN t_hour
WHERE dt_time BETWEEN TRUNC(SYSDATE) + h AND TRUNC(SYSDATE) + 1 + h
ORDER BY 1;
答案 2 :(得分:0)
在获取最近一天的数据时,您需要使用SYSDATE
。
此外,如果使用日期列添加或减去数字,则偏移量将是天数,而不是小时数。所以你需要使用&date/24
试试这个:
select distinct to_char(dt_time,'dd/mm/yyyy hh24'), fault_description
from order
where dt_time - &date / 24 between TRUNC(sysdate-1) and TRUNC(sysdate)
order by to_char(dt_ time,'dd/mm/yyyy hh24');
请评论。
答案 3 :(得分:0)
WHERE DATEDIFF(SYSDATE,DT_TIME) * 24 < &DATE AND DT_TIME < SYSDATE