如何仅根据Oracle中的日期部分比较两个DATE值?

Bhe*_*ung 11 sql oracle compare date datepart

我试图通过以下查询获取最近30天的计数 -

SELECT date_occured, COUNT(*) FROM problem
WHERE date_occured >= (CURRENT_DATE - 30)
GROUP BY date_occured;

//date_occured field is of type DATE.
Run Code Online (Sandbox Code Playgroud)

基本上,在我的查询中,我试图只比较条件中的日期部分date_occured >= (CURRENT_DATE - 30),但它似乎也比较时间.

我试过TRUNC如下 -

TRUNC(date_occured) >= TRUNC(CURRENT_DATE - 30)
Run Code Online (Sandbox Code Playgroud)

但是当运行查询时它永远不会返回.

我也尝试过 -

SELECT date_occured, COUNT(*) FROM problem    
GROUP BY date_occured
HAVING TRUNC(date_occured) >= TRUNC(CURRENT_DATE - 30);
Run Code Online (Sandbox Code Playgroud)

它永远不会回来.

如何只比较Oracle中两个DATE值的日期部分?

Ton*_*ews 15

对于这种情况,您只需要TRUNC右侧:

WHERE date_occured >= TRUNC(CURRENT_DATE - 30)
Run Code Online (Sandbox Code Playgroud)

为什么?因为如果TRUNC(date_occured)晚于TRUNC(CURRENT_DATE - 30),那么TRUNC(date_occured)之后的任何时刻也必然晚于TRUNC(CURRENT_DATE - 30).

date_occured> = TRUNC(date_occured)显然总是如此(考虑一下).

逻辑说如果A> = B且B> = C,则A> = C

现在代替:

  • 答:date_occured
  • B:TRUNC(date_occured)
  • C:TRUNC(CURRENT_DATE - 30)