我正在尝试通过知道包含日期和时间的列中的日期来检索表中的记录。
假设我有一个名为t1
的表,其中仅包含两列,分别是name
和date
。
列date
中存储的数据格式为8/3/2010 12:34:20 PM
。
例如,我想通过以下查询检索此记录(请注意,我没有放置时间):
Select * From t1 Where date="8/3/2010"
这个查询结果为空!
如果只知道日期而不知道时间,如何检索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')
如果没有索引或记录不太多。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
将您的日期列转换为正确的格式并进行比较:
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')
trunc(my_date,'DD')
会在Oracle中只给出日期而不是时间。
只需使用这个:
select * from t1 where to_date(date_column)='8/3/2010'
ORA-01843:不是有效的月份
。 - Paul StonerSelect * from t1 where date(col_name)="8/3/2010"
ORA-00936: 缺失表达式
的错误提示。 - Peter LangSELECT date(sysdate) FROM dual;
在第 1 行出现错误:ORA-00936:缺少表达式。 - NoelProf