Извлечение значений столбца на основе SYSDATE - PullRequest
1 голос
/ 02 декабря 2011

У меня есть таблица, в которой есть 2 столбца.Определение:

CREATE TABLE LOGGING_T
(
  TSTAMP  DATE,
  LINE    VARCHAR2(300)
)
TABLESPACE OPERATIONS
MONITORING
/

Столбец TSTAMP имеет значения типа 30-NOV-11, 29-NOV-11 ... и так далее.Сейчас я делаю этот запрос

select * from LOGGING_T where TSTAMP >= (SYSDATE - 1)

Текущая системная дата 01-DEC-11.В идеале вышеприведенный оператор должен возвращать записи с TSTAMP = 30-NOV-11, так как я делаю SYSDATE-1, что будет 30-NOV-11.Но это не получение этих записей.Зачем?

Однако, если я сделаю этот запрос

select * from LOGGING_T where TSTAMP >= (SYSDATE - 2)

Тогда он получит записи, которые TSTAMP есть 30-NOV-11.Я делаю что-то не так в этой простой операции с датой?

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Значение SYSDATE также имеет компонент времени.Скорее всего, дата в вашей базе данных также имеет компонент времени.

Измените ваш запрос на:

select * from LOGGING_T where TSTAMP >= TRUNC(SYSDATE - 1)

, чтобы увидеть все записи, которые были зарегистрированы с 00:00 вчера.

Чтобы увидеть фактические временные компоненты, используйте для Char.

SQL> select sysdate from dual;

SYSDATE
---------
01-DEC-11

  1* select to_char(sysdate,'DD-Mon-YYYY HH24:MI:SS') date1 from dual
SQL> /

DATE1
--------------------
01-Dec-2011 16:29:01
1 голос
/ 02 декабря 2011

A DATE содержит время суток, а также дату.

Если бы SYSDATE было 2011-12-01 1:18:00 PM, тогда SYSDATE-1 было бы 2011-11-30 1:18:00 PM.

Строки, которые вы ожидаете найти с 30 ноября до или после элемента времени?

Если вы не заботитесь о времени и хотите фильтровать только по дате, вы можете использовать TRUNC():

select * 
  from LOGGING_T 
 where TRUNC(TSTAMP) >= TRUNC(SYSDATE - 1);

Вы можете захотеть или не захотеть убедиться, что обе стороны вашего оператора сравнения TRUNC() ed, потому что TRUNC() просто заставит элемент времени даты быть полуночью.

select to_char(trunc(sysdate), 'YYYY-MM-DD HH:MI:SS PM') 
  from dual;

NOW
----------------------
2011-12-01 12:00:00 AM
...