Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle - chia ngày thành các quý

SELECT  ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL-1) )   AS qstart
    ,   ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1  AS qend
FROM    (   SELECT  TO_DATE('&start_date')  AS start_date
                ,   TO_DATE('&end_date')    AS end_date
            FROM    DUAL
        ) PARAM
CONNECT BY ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1
        <= PARAM.end_date

Quy tắc cho các tham số, bạn có thể cần điều chỉnh truy vấn cho phù hợp với mục đích của mình:

  • Nếu start_date không phải là ngày bắt đầu theo quý chính xác, thì bắt đầu theo quý đó hiệu quả sẽ sử dụng ngày bắt đầu của quý chứa.
  • Nếu end_date không phải là kết thúc quý chính xác thì chúng tôi sẽ kết thúc vào quý đã kết thúc TRƯỚC ngày end_date (không phải là quý có ngày kết thúc).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu Oracle Khóa chính Java JDBC

  2. Làm cách nào tôi có thể chọn bản ghi có mức lương cao thứ 2 trong cơ sở dữ liệu Oracle?

  3. Cách tốt hơn để cấu trúc câu lệnh PL / SQL IF THEN?

  4. sqlplus - sử dụng biến ràng buộc trong mệnh đề IN

  5. Oracle APEX - Bảng tra cứu với một số liên kết