#sql #oracle
Вопрос:
У меня есть простая база данных, предназначенная в основном для образовательных целей. Итак, вот эта таблица под названием «АРЕНДА».
В нем несколько колонок, но больше всего меня интересует первая. Он называется «BOOK_DATE», сообщая нам дату бронирования данного фильма. Я не понимаю, почему это делает этот запрос:
select book_date, count(*) from rental group by book_date;
верните это:
Почему эти двое 24-SEP-21
не сгруппированы вместе? (То же самое для 26-SEP-21
). Могут ли они быть представлены в разных форматах, или я допускаю какую-то логическую ошибку?
Ответ №1:
В Oracle a DATE
-это двоичный тип данных, который всегда содержит 7 байтов, представляющих столетие, год столетия, месяц, день, час, минуту и секунду (он не хранится в каком-либо формате).
Ваше клиентское приложение решает не отображать компонент времени DATE
, но это не означает, что компонент времени не существует.
Если вы используете:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
Затем он может установить другой формат для даты, если ваше клиентское приложение использует параметр сеанса для управления форматированием; если это не так, вам потребуется настроить параметры отображения клиентского приложения для дат (см. Руководство для вашего клиента).
Почему эти двое
24-SEP-21
не сгруппированы вместе?
Весьма вероятно, что они не сгруппированы вместе, поскольку у них одинаковые компоненты даты, но разные компоненты времени, и ваше клиентское приложение не отображает компонент времени, поэтому вы не видите разницы.
Если вы хотите агрегировать по дням, то TRUNC
съели дату:
select TRUNC(book_date), count(*) from rental group by TRUNC(book_date);