我正在尝试通过知道列中的日期包含日期和时间来从表中检索记录.
假设我有叫表t1只包含两个列name和date分别.
存储在列日期的数据就像这样8/3/2010 12:34:20 PM.
我想通过此查询检索此记录,例如(注意我没有花时间):
Select * From t1 Where date="8/3/2010"
Run Code Online (Sandbox Code Playgroud)
这个查询什么都没给我!
如何在没有时间的情况下date知道如何检索date?
Pet*_*ang 92
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')
Run Code Online (Sandbox Code Playgroud)
或者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')
Run Code Online (Sandbox Code Playgroud)
如果没有索引或者没有太多记录
WHERE TRUNC(your_date) = TO_DATE('2010-08-03', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)
应该足够了.TRUNC没有参数从a中删除小时,分钟和秒DATE.
如果性能真的很重要,请考虑Function Based Index在该列上添加:
CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
Run Code Online (Sandbox Code Playgroud)
小智 5
就我个人而言,我通常会选择:
select *
from t1
where date between trunc( :somedate ) -- 00:00:00
and trunc( :somedate ) + .99999 -- 23:59:59
Run Code Online (Sandbox Code Playgroud)
将日期列转换为正确的格式并进行比较:
SELECT * From my_table WHERE to_char(my_table.my_date_col,'MM/dd/yyyy') = '8/3/2010'
Run Code Online (Sandbox Code Playgroud)
这部分
to_char(my_table.my_date_col,'MM/dd/yyyy')
Run Code Online (Sandbox Code Playgroud)
将导致字符串'8/3/2010'