通过只知道没有时间的date(ORACLE)从表中select

我试图通过知道列中的date包含date和时间来从表中检索logging。

假设我有一个名为t1表,它分别只包含两个列namedate

存储在列date中的数据就像这个8/3/2010 12:34:20 PM

我想通过这个查询来检索这个logging,例如(注意我没有把时间):

 Select * From t1 Where date="8/3/2010" 

这个查询没有给我什么!

我怎样才能检索date只知道没有时间的date

DATE是Oracle中的一个保留关键字,所以我使用的是列名称your_date

如果你在your_date有一个索引,我会使用

 WHERE your_date >= TO_DATE('2010-08-03', 'YYYY-MM-DD') AND your_date < TO_DATE('2010-08-04', 'YYYY-MM-DD') 

BETWEEN

 WHERE your_date BETWEEN TO_DATE('2010-08-03', 'YYYY-MM-DD') AND TO_DATE('2010-08-03 23:59:59', 'YYYY-MM-DD HH24:MI:SS') 

如果没有索引或者没有太多的logging

 WHERE TRUNC(your_date) = TO_DATE('2010-08-03', 'YYYY-MM-DD') 

应该足够了。 不带参数的TRUNCDATE删除小时,分钟和秒钟。


如果性能真的很重要,可以考虑在该列上添加一个Function Based Index

 CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date)); 

就个人而言,我通常会与:

 select * from t1 where date between trunc( :somedate ) -- 00:00:00 and trunc( :somedate ) + .99999 -- 23:59:59 

您可以使用between函数获取2010-08-03 00:00:00:000和2010-08-03 23:59:59:000之间的所有logging

将date栏转换为正确的格式并进行比较:

 SELECT * From my_table WHERE to_char(my_table.my_date_col,'MM/dd/yyyy') = '8/3/2010' 

这部分

 to_char(my_table.my_date_col,'MM/dd/yyyy') 

将导致string'8/3/2010'

尝试以下方法。

 Select * from t1 where date(col_name)="8/3/2010" 

trunc(my_date,'DD')会给你只是date,而不是在Oracle中的时间。