`
wsql
  • 浏览: 12044095 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

date的to_char取自然周及format参数

 
阅读更多

很多時間我們需要用Oracle提供的to_char()函數來取得某個日期是屬於今年的第幾週.例如:TO_CHAR(TO_DATE('20090112','YYYYMMDD'), 'WW') ,得到的結果是02,就是第2?可看看日歷上,2009年1月12日第三週的週一.為什麼會有這樣的問題呢?
由於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語句,仍然以2009112為例:
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語句,當日期為20091231,計算出的結果就是01,這是什麼原因呢?

因為我們為日期加上被忽略的天數時,可能造成年末的日期跨年,成為下一年的日期,這樣再用TO_CHAR( )函數,取得的周就成了01。所以我們需要判斷當日期跨年時就置為年末的最後一天,從而取得正確的周。

所以,最終採用下面的SQL語句,就能夠得到正確的自然周了,以20091231為例:

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;


另外附上用於日期和時間的Format:

FORMAT 描述
HH 一天的小時數 (01-12)
HH12 一天的小時數 (01-12)
HH24 一天的小時數 (00-23)
MI 分鐘 (00-59)
SS 秒 (00-59)
MS 毫秒 (000-999)
US 微秒 (000000-999999)
SSSS 午夜後的秒 (0-86399)
AMA.M.PMP.M. 正午標識(大寫)
ama.m.pmp.m. 正午標識(小寫)
Y,YYY 帶逗號的年(4 和更多位)
YYYY 年(4和更多位)
YYY 年的後三位
YY 年的後兩位
Y 年的最後一位
IYYY ISO 年(4位或更多位)
IYY ISO 年的最後 3 位
IY ISO 年的最後 2 位
I ISO 年的最後一位
BCB.C.ADA.D. 紀元標識(大寫)
bcb.c.ada.d. 紀元標識(小寫)
MONTH 全長大寫月份名(空白填充為9字元)
Month 全長混合大小寫月份名(空白填充為9字元)
month 全長小寫月份名(空白填充為9字元)
MON 大寫縮寫月份名(3字元)
Mon 縮寫混合大小寫月份名(3字元)
mon 小寫縮寫月份名(3字元)
MM 月份號(01-12)
DAY 全長大寫日期名(空白填充為9字元)
Day 全長混合大小寫日期名(空白填充為9字元)
day 全長小寫日期名(空白填充為9字元)
DY 縮寫大寫日期名(3字元)
Dy 縮寫混合大小寫日期名(3字元)
dy 縮寫小寫日期名(3字元)
DDD 一年裏的日子(001-366)
DD 一個月裏的日子(01-31)
D 一周裏的日子(1-7;周日是1)
W 一個月裏的周數(1-5)(第一周從該月第一天開始)
WW 一年裏的周數(1-53)(第一周從該年的第一天開始)
IW ISO 一年裏的周數(第一個星期四在第一周裏)
CC 世紀(2 位)
J 儒略日(自西元前4712年1月1日來的天數)
Q 季度
RM 羅馬數字的月份(I-XII;I=JAN)(大寫)
rm 羅馬數字的月份(I-XII;I=JAN)(小寫)
TZ 時區名 (大寫)
tz 時區名 (小寫)
分享到:
评论

相关推荐

    Oracle中TO_DATE TO_CHAR格式

    Oracle 中 TO_DATE TO_CHAR 格式详解 Oracle 中 TO_DATE 和 TO_CHAR 函数是两个非常重要的日期时间处理函数,主要用于格式化日期和时间数据,以满足不同的应用需求。在本文中,我们将详细介绍 TO_DATE 和 TO_CHAR ...

    Oracle 中的 TO_DATE 和 TO_CHAR 函数

    ### Oracle中的TO_DATE和TO_...以上就是Oracle数据库中`TO_DATE`和`TO_CHAR`函数的基本使用方法及相关知识点的详细介绍。这两个函数在处理日期和时间数据时非常有用,能够帮助开发者和DBA更加灵活地操作和展示数据。

    oracle-sql基本语法例子,包括to_date,to_char

    总结的sql语法,其中包括一些函数的用法,to_date,to_char,to_number等等函数

    Oracle中TO_DATE、TO_CHAR,Oracle函数大全

    TO_CHAR(date_or_number, format_mask[, nls_territory]) ``` - `date_or_number`:要转换的日期或数值。 - `format_mask`:定义输出的格式。例如,'MM/DD/YYYY' 或 'FM9999.999'(货币格式)。 - `nls_territory`...

    Oracle 中的 TO-DATE 和 TO-CHAR 函数.docx

    `TO_CHAR( date, [ format_mask ] )` 其中,date 是要转换的 DATE 类型的日期对象,format_mask 是可选的格式化掩码。 TO_CHAR 函数可以将 DATE 类型的日期对象转换为各种格式的日期字符串,例如: `SELECT TO_...

    Oracle 中的 TO-DATE 和 TO-CHAR 函数.pdf

    "Oracle 中的 TO_DATE 和 TO_CHAR 函数" Oracle 中的 TO_DATE 函数和 TO_CHAR 函数是两个非常重要的日期处理函数。它们都是用于处理日期和时间的格式化、转换和计算。 TO_DATE 函数用于将字符串转换为日期类型。其...

    oracle to_char function

    `to_char`函数的基本语法是`to_char(value, format_mask)`, 其中`value`是要转换的值,而`format_mask`定义了输出的格式。例如,将一个日期转换为特定格式的字符串: ```sql SELECT to_char(sysdate, 'DD Mon YYYY ...

    ORACLE 关于时间函数to_date 的运用

    TO_DATE(date_string, format_mask) ``` - `date_string`: 需要转换的日期字符串。 - `format_mask`: 字符串的日期格式掩码,用于指导如何解析`date_string`。 ### 格式掩码详解 格式掩码定义了日期字符串的结构...

    Oracle_to_date

    ### Oracle_to_date:Oracle数据库中的日期格式转换 在Oracle数据库中,`TO_DATE`函数是处理日期和时间数据的关键工具之一。它主要用于将字符串转换为日期格式,这在实际的数据处理过程中非常常见,尤其是在需要对...

    Oracle to_date() 用法细节.txt

    通过本文的学习,我们不仅了解了 `to_date()` 函数的基本用法和参数格式,还深入探讨了日期格式掩码的意义及各种日期操作技巧。这对于日常开发工作中处理日期相关的问题有着重要的意义。此外,通过实际案例的演示,...

    Oracle to_char函数的使用方法

    在Oracle数据库中,`to_char`函数的语法结构通常为`to_char(expression, format_model)`,其中`expression`是你想要转换的数值或日期,而`format_model`则是定义转换格式的模板。 在Oracle中,`to_char`函数对于...

    oracle to_char函数将number转成string

    `to_char`函数的基本语法是`to_char(number_type, format_mask)`,其中`number_type`是你想要转换的数字或日期,`format_mask`则定义了转换后的字符串格式。在处理数字转换时,`format_mask`中的字符有着特定的含义...

    TO_DATE用法详解.doc

    该函数的语法为:TO_DATE(date_string, format_string),其中 date_string 是要转换的日期字符串,format_string 是日期字符串的格式。 1. 日期字符串格式 日期字符串可以有多种格式,例如:YYYY-MM-DD HH24:MI:SS...

    Oracle中To-date用法.pdf

    TO_CHAR 函数的格式为 `TO_CHAR( date, format )`,其中 `date` 是要转换的日期类型,`format` 是日期格式字符串。 下面是一些常见的 TO_CHAR 函数示例: * 将当前日期转换为字符串:`TO_CHAR(SYSDATE, 'yyyy-mm-...

    Oracle TO-DATE 日期格式大全.docx

    TO_DATE 函数的基本语法是 `TO_DATE( string, format )`,其中 string 是要转换的字符串,format 是格式字符串。 例如,要将当前日期转换为字符串,可以使用 `SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') ...

    oracle sql 根据年份、周数取日期

    其语法为:`TO_CHAR(date, format_mask)`。在这里,`date`是要转换的日期,而`format_mask`定义了输出字符串的日期格式。 ### 根据年份和周数取日期 在Oracle SQL中,确定一个特定年份和周数的起始和结束日期需要...

    PL/SQL 类型格式转换

    TO_CHAR(date[,’format_model'[,nlsparams]]) 第二个参数可以省略,不指定格式,按系统默认格式输出。 区分大小写。 使用FM(在格式控制符前添加)符号可以去掉空格或是首位的零。 如果指定了NLSPARAMS,则它控制...

    Oracle中TO-DATE格式.docx

    TO_CHAR 函数的基本语法是 TO_CHAR( date, format ),其中 date 是要转换的日期,format 是转换的格式。例如,TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') 将当前日期转换为字符串 'YYYY-MM-DD HH24:MI:SS'。 在...

Global site tag (gtag.js) - Google Analytics