Запрос Oracle SQL Group возвращает несколько «идентичных» строк

#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);