group by не дает результатов с предложением where - PullRequest
0 голосов
/ 06 июня 2019

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

(yes, begindatum - дата)

SELECT COUNT(cursus) AS inschrijvingen,
       cursus,
       begindatum
FROM   inschrijvingen
WHERE  begindatum BETWEEN TO_DATE('01-JAN-99', 'DD-MON-YY') 
                      and TO_DATE('31-DEC-99', 'DD-MON-YY')
GROUP BY cursus,
         begindatum;

Все строки, в которых в начале 1999 года был никола, я ничего не получаю

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Проблема в том, что TO_DATE('01-JAN-99', 'DD-MON-YY') переводится в 01-JAN-2099.

Есть 2 возможных решения:

1) Использовать 4 цифры года: TO_DATE('01-JAN-1999', 'DD-MON-YYYY')

2) Использовать RR вместо YY: TO_DATE('01-JAN-99', 'DD-MON-RR') переводится в 01-JAN-1999.

0 голосов
/ 06 июня 2019

Используйте ключевое слово DATE для ввода дат в стандартных форматах ISO:

SELECT COUNT(cursus) AS inschrijvingen, cursus,
       begindatum
FROM inschrijvingen
WHERE begindatum BETWEEN DATE '1999-01-01' AND DATE '1999-12-31'
GROUP BY cursus, begindatum;

Никогда не следует использовать двузначные годы.Вы можете использовать TO_DATE(), но это просто неуклюже, когда вы можете явно добавлять литералы даты в качестве дат.

Кроме того, тип данных Oracle DATE включает времена.Это означает, что вышеупомянутое может не включать последний день года.Вместо BETWEEN я настоятельно рекомендую неравенства:

WHERE begindatum >= DATE '1999-01-01' AND
      begindatum < DATE '2000-01-01'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...