Как получить данные за предыдущий день - PullRequest
0 голосов
/ 19 июня 2020

Я хочу получить данные за предыдущий день, но мои SQL утверждения не работают. Я получаю сообщение об ошибке:

ORA-00904: «DATEDIFF»: недопустимый идентификатор

SELECT * 
FROM table_name 
WHERE DATEDIFF(day,table_name .creation_dt ,GETDATE()) = 1;

SELECT *
FROM table_name 
WHERE DATEDIFF(DAY, DATEADD(DAY, -1 , CURRENT_TIMESTAMP), creation_dt) = 0;

SELECT *
FROM table_name 
WHERE `date` = creation_dt.CURDATE() - INTERVAL 1 DAY;

спасибо Khati

Ответы [ 4 ]

2 голосов
/ 19 июня 2020

Для oracle предыдущего дня вы можете использовать sysdate - 1

select * from table_name where trunc(date) = trunc(sysdate)-1
1 голос
/ 19 июня 2020

Поскольку DATE тип данных в Oracle содержит дату и время, а поскольку «предыдущий день» начинается в 00:00:00 часов (: min: se c), то усечение SYSDATE «сбрасывает» время до упомянутый 00:00:00, при вычитании 1 день вы переместитесь в полночь в начале вчерашнего дня.

SQL> select trunc(sysdate) - 1 from dual;

TRUNC(SYSDATE)-1
-------------------
18.06.2020 00:00:00

Итак:

select *
from your_table
where date_column >= trunc(sysdate) - 1;
0 голосов
/ 19 июня 2020

Я хочу получить данные за предыдущий день,

В Oracle я бы рекомендовал:

where table_name.creation_dt >= trunc(sysdate) - interval '1' day and
      table_name.creation_dt < trunc(sysdate)

Это может использовать индекс на creation_dt. Я также рекомендую вам использовать синтаксис interval для работы с датами. Хотя вы можете использовать trunc(sysdate) - 1, мне это кажется старомодным (Oracle не всегда поддерживал interval).

Вы также можете сформулировать это более кратко, как:

where trunc(table_name.creation_dt) = trunc(sysdate) - interval '1' day 

Однако это может быть немного сложнее для оптимизатора.

0 голосов
/ 19 июня 2020

РАЗНДАТ - это SQL функция c сервера. Вы используете сервер SQL или другое ядро ​​СУБД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...