Sql Oracle查询时间(而不是日期)

Sql Oracle查询时间(而不是日期),sql,oracle,date,datetime,Sql,Oracle,Date,Datetime,如何仅查询Orace日期字段的时间部分。即: select * from mytable where date_column < '05:30:00' 希望查询返回日期列表示的时间小于5:30的任何行,而不考虑日期。您可以这样尝试: select * from mytable where to_char( date_column, 'HH24:MI:SS' ) < '05:30:00' 您可以这样尝试: select * from mytable where to_c

如何仅查询Orace日期字段的时间部分。即:

select * from mytable 
where 
date_column < '05:30:00'
希望查询返回日期列表示的时间小于5:30的任何行,而不考虑日期。

您可以这样尝试:

select * from mytable 
where 
to_char( date_column, 'HH24:MI:SS' ) < '05:30:00'
您可以这样尝试:

select * from mytable 
where 
to_char( date_column, 'HH24:MI:SS' ) < '05:30:00'

您可以查看日期离午夜有多远,并在此基础上进行筛选:

select * from mytable 
where date_column - trunc(date_column) < 5.5/24
通过这种方式,您可以将列中的日期与截断的日期进行比较,即当天的午夜加上5小时30分钟,即当天的05:30

使用CTE中的简单数据和第三个非常轻微的变体进行快速演示,但它们都得到相同的结果:

with mytable (date_column) as (
  select to_date('2016-04-15 05:29:29', 'YYYY-MM-DD HH24:MI:SS') from dual
  union all select to_date('2016-04-14 05:29:29', 'YYYY-MM-DD HH24:MI:SS') from dual
  union all select to_date('2016-04-15 05:30:30', 'YYYY-MM-DD HH24:MI:SS') from dual
)
select * from mytable 
where date_column < trunc(date_column) + 5.5/24;

DATE_COLUMN       
-------------------
2016-04-15 05:29:29
2016-04-14 05:29:29

但是请注意,对列的任何这样的操作都会阻止使用索引。如果您必须定期执行此操作,则可能需要添加一个虚拟列/索引来执行此计算。

您可以查看日期离午夜有多远,并根据该值进行筛选:

select * from mytable 
where date_column - trunc(date_column) < 5.5/24
通过这种方式,您可以将列中的日期与截断的日期进行比较,即当天的午夜加上5小时30分钟,即当天的05:30

使用CTE中的简单数据和第三个非常轻微的变体进行快速演示,但它们都得到相同的结果:

with mytable (date_column) as (
  select to_date('2016-04-15 05:29:29', 'YYYY-MM-DD HH24:MI:SS') from dual
  union all select to_date('2016-04-14 05:29:29', 'YYYY-MM-DD HH24:MI:SS') from dual
  union all select to_date('2016-04-15 05:30:30', 'YYYY-MM-DD HH24:MI:SS') from dual
)
select * from mytable 
where date_column < trunc(date_column) + 5.5/24;

DATE_COLUMN       
-------------------
2016-04-15 05:29:29
2016-04-14 05:29:29

但是请注意,对列的任何这样的操作都会阻止使用索引。如果必须定期执行此操作,则可能值得添加一个虚拟列/索引来执行此计算。

您需要将时间转换回最新时间,否则您只需进行字符串比较。 甲骨文并没有一个聪明的方法来做到这一点。最简单的方法是将两个日期转换为同一天并进行比较


您需要将时间转换回日期,否则您只是在进行字符串比较。 甲骨文并没有一个聪明的方法来做到这一点。最简单的方法是将两个日期转换为同一天并进行比较


@马库斯利昂-这不是很有帮助。当你运行它时会发生什么?你有什么原始数据,你期望得到什么结果,你得到什么?将前两个问题添加到问题中可能会有用。我刚刚检查了一些测试数据,它返回了时间在任何日期05:30之前的行。很难找到字符日期列,'HH24:MI:SS'<'05:30:00'看起来simple@PavelZimogorov-不知道为什么很难,只是简单的数学。字符串比较让我感到紧张,尽管使用HH24面具是安全的。@MarcusLeon-这没有多大帮助。当你运行它时会发生什么?你有什么原始数据,你期望得到什么结果,你得到什么?将前两个问题添加到问题中可能会有用。我刚刚检查了一些测试数据,它返回了时间在任何日期05:30之前的行。很难找到字符日期列,'HH24:MI:SS'<'05:30:00'看起来simple@PavelZimogorov-不知道为什么很难,只是简单的数学。字符串比较让我感到紧张,尽管使用HH24面具是安全的。这是一个日期栏Alex的回答也很有效,但这是最容易理解的。谢谢。请记住,你所做的是字符串比较,而不是时间或日期。只要你使用24小时格式,字符串比较就应该有效。alex的答案也有效,但这是最容易理解的,谢谢。请记住,你所做的是字符串比较,而不是时间或日期。只要使用24小时格式,字符串比较就可以工作。