Đây sẽ là tuần (Chủ nhật - Thứ bảy) của quý:
SELECT TO_CHAR( SYSDATE, 'YYYY-"Q"Q-"W"' )
|| ( 7 + TRUNC( SYSDATE + 1, 'IW' ) - TRUNC( TRUNC( SYSDATE, 'Q' ) + 1, 'IW' ) ) / 7;
AS "Current Time"
FROM DUAL
Giải thích :
- Bạn có thể tìm Chủ Nhật trùng hoặc ngay trước một ngày cụ thể bằng cách sử dụng
NEXT_DAY (TRUNC (date_value), 'SUNDAY') - 7
(phụ thuộc vàoNLS_TERRITORY
cài đặt) hoặcTRUNC (date_value + 1, 'IW') - 1
(ngắn hơn và không phụ thuộc vào bất kỳ cài đặt nào). -
TRUNC (date_value, 'Q')
cung cấp cho ngày của ngày đầu tiên của quý chứa giá trị - Kết hợp cả hai lại với nhau, ngày Chủ nhật trước ngày đầu tiên của quý được cung cấp bởi
TRUNC (TRUNC (date_value, 'Q') + 1, 'IW') - 1
- Do đó, số ngày giữa Chủ Nhật trước hoặc ngay trước khi bắt đầu quý và Chủ Nhật trước một ngày nhất định là:
(TRUNC (date_value + 1, ' IW ') - 1) - (TRUNC (TRUNC (date_value,' Q ') + 1,' IW ') - 1)
- có thể đơn giản hóa bằng cách hủy-1
điều khoản. - Số tuần chênh lệch chỉ là số đó chia cho 7 (nhưng cho giá trị được lập chỉ mục 0 và bạn muốn số tuần của quý được lập chỉ mục 1; bạn thêm 1 tuần vào kết quả hoặc trước thực hiện phép chia, cộng thêm 7 ngày).