Oracle 10g按日期选择查询返回无结果

时间:2014-03-05 04:49:32

标签: sql oracle oracle10g

我有一些令人困惑的问题。

 SQL> select login, status, date_modified from users where login = 'zack_661' and date_modified = '05-MAR-14';

no rows selected

SQL> select login, status, date_modified from users where login = 'zack_661' and date_modified = sysdate;

no rows selected

两个查询都没有结果,但如果我没有指定日期,则返回结果。

SQL> select login, status, date_modified from users where login = 'zack_661';

LOGIN                                                  STATUS DATE_MODI
-------------------------------------------------- ---------- ---------
zack_661                                                    1 05-MAR-14

SQL> select sysdate from dual;

SYSDATE
---------
05-MAR-14

这是表架构。

SQL> desc users;

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
LOGIN                                     NOT NULL VARCHAR2(50)
STATUS                                             NUMBER
DATE_CREATED                                       DATE
DATE_MODIFIED                                      DATE

我也在尝试使用其他功能,但仍然没有结果

SQL> select login, status, date_modified from users where login = 'zack_661' and date_modified = to_date('05-MAR-14','DD-MON-YY');

no rows selected

SQL> select to_date('05-MAR-14','DD-MON-YY') from dual;

TO_DATE('
---------
05-MAR-14

提前感谢您的帮助。

更新

感谢KevinKirkpatrick。我可以这样结束。

SQL> select login, status, date_modified from users where login = 'zack_661' and date_modified between TO_DATE('05-MAR-2014 00:00:00', 'DD-MON-YYYY HH24:MI:SS') and TO_DATE('05-MAR-2014 23:59:59', 'DD-MON-YYYY HH24:MI:SS');

LOGIN                                                  STATUS DATE_MODI
-------------------------------------------------- ---------- ---------
zack_661                                                    1 05-MAR-14

对于其他任何人都非常感谢你的帮助。我真的很感激。我应该帮助别人,因为我是新来的。

4 个答案:

答案 0 :(得分:3)

如果你不依赖时间,那么你可以试试这个

select login, status, date_modified from xdsl where login = 'zack_661' and trunc(date_modified)=to_date('05-MAR-14','DD-MON-YY');   

答案 1 :(得分:1)

Oracle DATE存储到最近的秒。当您查询DATE_MODIFIED时,Oracle将使用您的NLS_date_format格式化日期。令人讨厌的是,此参数的默认设置不显示日期值的小时/分钟/秒部分。因此,默认情况下,看起来您的DATE值只是整个日期,即使它们不是。在你的情况下,DATE_MODIFIED几乎肯定不是'05 -MAR-2014'(实际上是3月5日凌晨12点)。希望以下示例更清楚:

SQL> CREATE TABLE EXAMPLE (DATE_MODIFIED DATE);

Table created.

SQL> INSERT INTO EXAMPLE VALUES (SYSDATE);

1 row created.

SQL> COLUMN DATE_MODIFIED FORMAT A20
SQL> SELECT * FROM EXAMPLE;

DATE_MODIFIED
--------------------
04-MAR-14

SQL> SELECT * FROM EXAMPLE WHERE DATE_MODIFIED = '04-MAR-14';

no rows selected

SQL> SELECT TO_CHAR(DATE_MODIFIED,'DD-MON-YYYY HH24:MI:SS') DATE_MODIFIED FROM EXAMPLE;

DATE_MODIFIED
--------------------
04-MAR-2014 21:40:45

SQL> SELECT * FROM EXAMPLE WHERE DATE_MODIFIED = TO_DATE('04-MAR-2014 21:40:45',
'DD-MON-YYYY HH24:MI:SS');

DATE_MODIFIED
--------------------
04-MAR-14

SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';

Session altered.

SQL> SELECT * FROM EXAMPLE;

DATE_MODIFIED
--------------------
04-MAR-2014 21:40:45

SQL>

答案 2 :(得分:0)

可能会帮助你

select login, status, date_modified from xdsl where login = 'zack_661' and date_modified =to_date('05-MAR-14','DD-MON-YY');

答案 3 :(得分:0)

您可以使用此

  where date_modified  = to_date('31-DEC-95','DD-MON-YY')