使用TO_Char()函式如何取自然周
由於Oracle在to_char()函式計算一年中的第幾周是從該年的1月1日開始,7天為1周來計算的,所以2009年的1月12日,就是第2周. 為了得到自然周,我們需要為該日期加上該年的1月1日所在周被忽略掉的那些天數,然後再用TO_CHAR( )函式,就可以取得自然周了。但當1月1日為週日時,用TO_DATE(' ', 'D')計算出它是該周的第1天,實際上這1天已是本年的第一週了,所以需要用一個DECODE將其置為第8天,然後再計算被忽略掉的天數,才能得到正確的結果。 所以,可以採用下面的SQL語句,仍然以2009年1月12日為例:SELECT TO_CHAR(TO_DATE('20090112', 'YYYYMMDD') +
TO_NUMBER(DECODE(TO_CHAR(TRUNC(TO_DATE('20090112',
'YYYYMMDD'),
'YYYY'),
'D'),
'1',
'8',
TO_CHAR(TRUNC(TO_DATE('20090112', 'YYYYMMDD'),
'YYYY'),
'D'))) - 2,
'WW')
FROM DUAL;
P.S. to_date('','D')是取該日期為一週內的第幾天,從週日開始,週日為1.所以如果1月1日為週日,那麼1月2日就應該是第2周.
上面的SQL語句,當日期為2009年12月31日時,計算出的結果就是01,這是什麼原因呢?
因為我們為日期加上被忽略的天數時,可能造成年末的日期跨年,成為下一年的日期,這樣再用TO_CHAR( )函式,取得的周就成了01。所以我們需要判斷當日期跨年時就置為年末的最後一天,從而取得正確的周。
所以,最終採用下面的SQL語句,就能夠得到正確的自然周了,以2009年12月31日為例:
SELECT TO_CHAR(DECODE(SIGN((TO_DATE('20091231', 'YYYYMMDD') +
TO_NUMBER(DECODE(TO_CHAR(TRUNC(TO_DATE('20091231',
'YYYYMMDD'),
'YYYY'),
'D'),
'1',
'8',
TO_CHAR(TRUNC(TO_DATE('20091231',
'YYYYMMDD'),
'YYYY'),
'D'))) - 2) -
LAST_DAY(TO_DATE('20091231', 'YYYYMMDD'))),
1,
LAST_DAY(TO_DATE('20091231', 'YYYYMMDD')),
(TO_DATE('20091231', 'YYYYMMDD') +
TO_NUMBER(DECODE(TO_CHAR(TRUNC(TO_DATE('20091231',
'YYYYMMDD'),
'YYYY'),
'D'),
'1',
'8',
TO_CHAR(TRUNC(TO_DATE('20091231',
'YYYYMMDD'),
'YYYY'),
'D'))) - 2)),
'WW')
FROM DUAL;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84641/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle to_char函式的使用Oracle函式
- oracle to_char 函式Oracle函式
- oracle to_char函式Oracle函式
- to_char函式不要使用hh格式函式
- 【函式】Oracle EXTRACT()函式與to_char() 函式函式Oracle
- 關於Oracle to_char()函式中的IW,WW 周別顯示Oracle函式
- ORACLE TO_CHAR()函式中日期格式的使用Oracle函式
- ORACLE to_char函式詳解Oracle函式
- oracle中ascii函式及to_char函式使用及編碼間的轉換OracleASCII函式
- to_char函式格式轉換參考函式
- oracle中函式to_char()的用法介紹Oracle函式
- 工作學習筆記(三)to_char函式筆記函式
- 【Tip】使用TO_DATE和TO_CHAR函式讓Oracle自己去數數函式Oracle
- 如何使用python中的取整floor函式?Python函式
- Oracle 中的 TO_DATE 和 TO_CHAR 函式 日期處理Oracle函式
- 快取函式的簡單使用快取函式
- vb如何使用ftp函式,vb如何使用ftp函式要知道這些FTP函式
- Oracle中的時間函式用法(to_date、to_char) (總結)Oracle函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- MySQL中MAX函式如何使用?MySql函式
- Mysql pg oracle三種資料庫獲取月份、周的函式比較MySqlOracle資料庫函式
- 反射如何獲取函式的引數名反射函式
- 求周、月、季、年、紀的函式函式
- to_char取週數的演算法演算法
- 如何使用成員函式指標函式指標
- 如何使用函式來優化效能函式優化
- python中fail函式如何使用PythonAI函式
- python中super函式如何使用?Python函式
- 在Excel中如何使用TEXT函式?Excel函式
- PHP 第九周函式學習記錄PHP函式
- Python中eval函式的表示式如何使用Python函式
- PostgreSQL 視窗函式 ( Window Functions ) 如何使用?SQL函式Function
- 如何使用python中的exec函式?Python函式
- 精讀《函式快取》函式快取
- Mysql字串擷取函式MySql字串函式
- 新版字元擷取函式字元函式
- PHP 第四周函式學習記錄PHP函式
- [譯] 使用 closest() 函式獲取正確的 DOM 元素函式