我在过滤日期和时间之前和之后两个小时的时间上遇到了麻烦。我尝试过:
SELECT *
FROM
table
where
date >= sysdate - 1
AND
TO_DATE( Time, 'HH24:MI:SS' ) >= TO_DATE( sysdate, 'HH24:MI:SS' ) - 2
但是我收到不一致的类型错误,这是我以为我正在使用TO_DATE()函数处理的错误,但我猜不是。
答案 0 :(得分:2)
sysdate
已经是一个日期(和时间),所以TO_DATE( sysdate, 'HH24:MI:SS' )
毫无意义。
您没有为date
中的time
和table
列提供数据类型,所以我假设它们都是varchar2(10)
格式MM / DD / YYYY和HH24:MI:SS。
我还将继续更改示例表和列名,因为它们是在实际查询中使用的无效名称。
-- example data
with my_table as (select '06/13/2019' as date_column, '09:40:34' as time_column from dual)
-- your query
SELECT *
FROM
my_table
where
to_date(date_column || ' ' || time_column, 'MM/DD/YYYY HH24:MI:SS') >= sysdate - 2/24
我在这里要做的是将日期和时间字符串组合为一个日期时间字符串,然后将其转换为Oracle date
类型(实际上是日期+时间)。然后,我们将其与sysdate - 2/24
进行比较,date_column
表示要花费当前时间并减去一天的2/24秒,即2个小时。
对于此示例,您可能需要将示例数据time_column
和int
的值更改为过去2小时内的值,具体取决于您运行此数据的时间以及所处的时区。