很多時間我們需要用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語句,仍然以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;
另外附上用於日期和時間的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)
|
AM或A.M.或PM或P.M.
|
正午標識(大寫)
|
am或a.m.或pm或p.m.
|
正午標識(小寫)
|
Y,YYY
|
帶逗號的年(4 和更多位)
|
YYYY
|
年(4和更多位)
|
YYY
|
年的後三位
|
YY
|
年的後兩位
|
Y
|
年的最後一位
|
IYYY
|
ISO 年(4位或更多位)
|
IYY
|
ISO 年的最後 3 位
|
IY
|
ISO 年的最後 2 位
|
I
|
ISO 年的最後一位
|
BC或B.C.或AD或A.D.
|
紀元標識(大寫)
|
bc或b.c.或ad或a.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 函数是两个非常重要的日期时间处理函数,主要用于格式化日期和时间数据,以满足不同的应用需求。在本文中,我们将详细介绍 TO_DATE 和 TO_CHAR ...
### Oracle中的TO_DATE和TO_...以上就是Oracle数据库中`TO_DATE`和`TO_CHAR`函数的基本使用方法及相关知识点的详细介绍。这两个函数在处理日期和时间数据时非常有用,能够帮助开发者和DBA更加灵活地操作和展示数据。
总结的sql语法,其中包括一些函数的用法,to_date,to_char,to_number等等函数
TO_CHAR(date_or_number, format_mask[, nls_territory]) ``` - `date_or_number`:要转换的日期或数值。 - `format_mask`:定义输出的格式。例如,'MM/DD/YYYY' 或 'FM9999.999'(货币格式)。 - `nls_territory`...
`TO_CHAR( date, [ format_mask ] )` 其中,date 是要转换的 DATE 类型的日期对象,format_mask 是可选的格式化掩码。 TO_CHAR 函数可以将 DATE 类型的日期对象转换为各种格式的日期字符串,例如: `SELECT TO_...
"Oracle 中的 TO_DATE 和 TO_CHAR 函数" Oracle 中的 TO_DATE 函数和 TO_CHAR 函数是两个非常重要的日期处理函数。它们都是用于处理日期和时间的格式化、转换和计算。 TO_DATE 函数用于将字符串转换为日期类型。其...
`to_char`函数的基本语法是`to_char(value, format_mask)`, 其中`value`是要转换的值,而`format_mask`定义了输出的格式。例如,将一个日期转换为特定格式的字符串: ```sql SELECT to_char(sysdate, 'DD Mon YYYY ...
TO_DATE(date_string, format_mask) ``` - `date_string`: 需要转换的日期字符串。 - `format_mask`: 字符串的日期格式掩码,用于指导如何解析`date_string`。 ### 格式掩码详解 格式掩码定义了日期字符串的结构...
### Oracle_to_date:Oracle数据库中的日期格式转换 在Oracle数据库中,`TO_DATE`函数是处理日期和时间数据的关键工具之一。它主要用于将字符串转换为日期格式,这在实际的数据处理过程中非常常见,尤其是在需要对...
通过本文的学习,我们不仅了解了 `to_date()` 函数的基本用法和参数格式,还深入探讨了日期格式掩码的意义及各种日期操作技巧。这对于日常开发工作中处理日期相关的问题有着重要的意义。此外,通过实际案例的演示,...
在Oracle数据库中,`to_char`函数的语法结构通常为`to_char(expression, format_model)`,其中`expression`是你想要转换的数值或日期,而`format_model`则是定义转换格式的模板。 在Oracle中,`to_char`函数对于...
`to_char`函数的基本语法是`to_char(number_type, format_mask)`,其中`number_type`是你想要转换的数字或日期,`format_mask`则定义了转换后的字符串格式。在处理数字转换时,`format_mask`中的字符有着特定的含义...
该函数的语法为:TO_DATE(date_string, format_string),其中 date_string 是要转换的日期字符串,format_string 是日期字符串的格式。 1. 日期字符串格式 日期字符串可以有多种格式,例如:YYYY-MM-DD HH24:MI:SS...
TO_CHAR 函数的格式为 `TO_CHAR( date, format )`,其中 `date` 是要转换的日期类型,`format` 是日期格式字符串。 下面是一些常见的 TO_CHAR 函数示例: * 将当前日期转换为字符串:`TO_CHAR(SYSDATE, 'yyyy-mm-...
TO_DATE 函数的基本语法是 `TO_DATE( string, format )`,其中 string 是要转换的字符串,format 是格式字符串。 例如,要将当前日期转换为字符串,可以使用 `SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') ...
其语法为:`TO_CHAR(date, format_mask)`。在这里,`date`是要转换的日期,而`format_mask`定义了输出字符串的日期格式。 ### 根据年份和周数取日期 在Oracle SQL中,确定一个特定年份和周数的起始和结束日期需要...
TO_CHAR(date[,’format_model'[,nlsparams]]) 第二个参数可以省略,不指定格式,按系统默认格式输出。 区分大小写。 使用FM(在格式控制符前添加)符号可以去掉空格或是首位的零。 如果指定了NLSPARAMS,则它控制...
TO_CHAR 函数的基本语法是 TO_CHAR( date, format ),其中 date 是要转换的日期,format 是转换的格式。例如,TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') 将当前日期转换为字符串 'YYYY-MM-DD HH24:MI:SS'。 在...