只知道没有时间的日期从表中选择(ORACLE)

Abd*_*man 45 sql oracle date

我正在尝试通过知道列中的日期包含日期和时间来从表中检索记录.

假设我有叫表t1只包含两个列namedate分别.

存储在列日期的数据就像这样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)


use*_*026 5

将日期列转换为正确的格式并进行比较:

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'