[英]Oracle query for finding the week
我們在下面的查詢中獲取從1970-01-01開始的當前星期數,但是它是寫回了一些時間,您能否確切告訴我為什么它從減去日期中減去3?
SELECT
TRUNC((to_number(sysdate-to_date('1970-01-01','YYYY-MM-DD'))-3)/7) week from dual
如果您輸入了幾天的時間:
查詢1 :
SELECT TRUNC((to_number(dt-to_date('1970-01-01','YYYY-MM-DD'))-3)/7)
week,
TO_CHAR( dt, 'DY YYYY-MM-DD' ) AS day
FROM ( SELECT TRUNC( SYSDATE, 'IW' ) + LEVEL - 1 AS dt
FROM DUAL
CONNECT BY LEVEL <= 7 )
結果 :
| WEEK | DAY |
|------|----------------|
| 2491 | MON 2017-10-02 |
| 2491 | TUE 2017-10-03 |
| 2491 | WED 2017-10-04 |
| 2491 | THU 2017-10-05 |
| 2491 | FRI 2017-10-06 |
| 2491 | SAT 2017-10-07 |
| 2492 | SUN 2017-10-08 |
該查詢不會將日期轉換為星期一,而是將時差減少3,因此可以有效地計算當前日期與1970年1月4日星期日之間的整周數。
您的查詢的簡化版本為:
SELECT TRUNC( ( SYSDATE - DATE '1970-01-04' ) / 7 ) AS Week
FROM DUAL;
或更能說明“魔術”日期的版本:
SELECT TRUNC( ( SYSDATE - NEXT_DAY( DATE '1970-01-01', 'SUNDAY' ) ) / 7 ) AS Week
FROM DUAL;
1970-01-01是星期四。
減去三天的目的是將一周的開始時間移到星期一。
注意,當前千年的第一天-2001-01-01-方便地是星期一。 這使其成為方便的參考點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.