通过只知道没有时间的date(ORACLE)从表中select
我试图通过知道列中的date包含date和时间来从表中检索logging。
假设我有一个名为t1
表,它分别只包含两个列name
和date
。
存储在列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')
应该足够了。 不带参数的TRUNC
从DATE
删除小时,分钟和秒钟。
如果性能真的很重要,可以考虑在该列上添加一个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中的时间。