В 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;