簡體   English   中英

Oracle查詢以查找星期

[英]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

如果您輸入了幾天的時間:

SQL小提琴

查詢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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM