代码之家  ›  专栏  ›  技术社区  ›  user8467219

Oracle:日期范围

  •  0
  • user8467219  · 技术社区  · 7 年前

    我有以下问题;表:

    问题: 我正在尝试捕获那个月重新分配的ID。

    例如,8月份重新分配的总数为1,而不是3

    因此,最晚的租金分配日期需要在一个月内 8月:8月1日至8月31日 9月:9月1日至9月30日 然后计数以捕获当月重新分配的ID数

     ,CASE WHEN 
    H.FIRST_ASSGN_DT IS NULL THEN 'UnAssigned'
    WHEN h.TOTAL_NUMBER_OF_REASSIGNMENTS = 0 OR h.TOTAL_NUMBER_OF_REASSIGNMENTS IS NULL 
    AND h.FIRST_ASSGN_DT IS NOT   NULL   THEN 'NewlyAssigned'  
    ELSE 'ReAssigned'
    END ASSIGNED_STATUS 
    

    表:

    ID    Total_Number_Reassignment  Most_Recent_Assignment    StartDate    *Assigned Status   
    1          2                           11/01/2016           08/1/2017      ReAssigned
    2          3                           08/02/2017           08/01/2017     ReAssigned
    3          0                                                08/15/2017     NewlyAssigned   
    4          5                           12/01/2016           09/01/2017     ReAssigned
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Strikegently    7 年前

    Oracle中的日期范围可以通过使用 BETWEEN

    如果列是类型 DATE WHERE TRUNC(Most_Recent_Assignment) BETWEEN TO_DATE('2017-08-01') AND TO_DATE('2017-08-31')

    注:the TRUNC 将日期截断为午夜,这样就不会丢失基于一天中时间的结果。

    OP澄清了他的问题。

    SELECT 
        TO_CHAR('Most_Recent_Assignment', 'mm'),
        COUNT(TO_CHAR('Most_Recent_Assignment', 'mm'))
    FROM TABLE
    WHERE ...
    GROUP BY TO_CHAR('Most_Recent_Assignment', 'mm')
    

    TO_CHAR 将日期解析为字符串。 mm 将返回2位数的月份。你可以用 Month

    该小组将把所有月份放在一起。