Как я могу получить вчерашнюю дату в Oracle при значении даты из указанного столбца c? - PullRequest
0 голосов
/ 15 января 2020

Я хотел получить вчерашнюю дату из моего столбца Дата,

Мой логин c равен

SELECT MY_DATE,NAME,MONEY FROM MY_TABLE
WHERE MY_DATE-1

Мои записи выглядят так

MYDATE      NAME    MONEY
10/31/2019  BILLY   2000
11/1/2019   BILLY   3000

Если сегодня 01.11.2009, я хотел получить записи 31.10.2009. Результат выбора, который я хотел, составляет

MYDATE       NAME   MONEY
10/31/2019   BILLY  2000

Ответы [ 2 ]

1 голос
/ 15 января 2020

В Oracle a DATE тип данных всегда имеет год, месяц, день, час, минуты и секунды. Ваш пользовательский интерфейс может не отображать компоненты времени, но они все еще существуют.

Если ваши компоненты времени гарантированно всегда будут установлены в полночь, вы можете использовать:

SELECT MY_DATE,
       NAME,
       MONEY
FROM   MY_TABLE
WHERE  MY_DATE = TRUNC( SYSDATE ) - 1;

Если у вас нет -значения в ночное время в столбце MY_DATE, тогда указанный выше метод не будет работать, и вместо этого лучший способ - сравнить диапазон значений (поскольку это позволяет Oracle использовать индекс для вашего столбца):

SELECT MY_DATE,
       NAME,
       MONEY
FROM   MY_TABLE
WHERE  MY_DATE >= TRUNC( SYSDATE ) - 1
AND    MY_DATE <  TRUNC( SYSDATE );

Вы также можете обрезать обе стороны сравнения (однако Oracle не будет использовать индекс для столбца и потребует отдельного индекса на основе функций):

SELECT MY_DATE,
       NAME,
       MONEY
FROM   MY_TABLE
WHERE  TRUNC( MY_DATE ) = TRUNC( SYSDATE ) - 1;
1 голос
/ 15 января 2020

Поскольку вам нужна вчерашняя дата, я не понимаю, почему вы не хотите использовать SYSDATE.
В противном случае это довольно просто:

WHERE my_date = TRUNC(SYSDATE-1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...