group by不提供带where子句的结果

时间:2019-06-06 08:49:23

标签: sql oracle

在查询中添加where子句后,即使有符合条件的行,也不会再有任何结果。

(是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年都有begindatum的行,相反,我没有任何结果

2 个答案:

答案 0 :(得分:2)

问题是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

答案 1 :(得分:0)

使用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'