oracle iyyy、yyyy、ww、iw之间的区别
2022/2/14 19:12:59
本文主要是介绍oracle iyyy、yyyy、ww、iw之间的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2022-01-01 IYYY显示的是2021的第52周,YYYY显示的是2022年的第52周
select to_char(to_date('2022-01-01','yyyy-mm-dd'), 'IYYY."W"iw') week_seq, trunc(to_date('2022-01-01','yyyy-mm-dd'), 'iw') Monday, trunc(to_date('2022-01-01','yyyy-mm-dd'), 'iw') + 6 Sunday from dual;
select to_char(to_date('2022-01-01','yyyy-mm-dd'), 'YYYY."W"iw') week_seq, trunc(to_date('2022-01-01','yyyy-mm-dd'), 'iw') Monday, trunc(to_date('2022-01-01','yyyy-mm-dd'), 'iw') + 6 Sunday from dual;
经查看官网可知IYYY、IW指的是ISO的标准格式,而YYYY、WW是普通的日期格式,他们之间的区别在ISO标准认为日期是从周一到周日,按周计算,如果某一年的一月一号是周六或者周日,则某一年的第一周是延续上一年的周结束后算起,如果某一年的一月一号周二三四五,则该年的第一周从去年开始算起。而普通的标准则指定任何一年的一月一号都是周一,所以在使用日期的时候需要特别的注意,具体案列分析如下:
SQL> select to_char(date '2013-12-29','iyyy-mm'),to_char(date '2013-12-30','iyyy-mm'),to_char(date'2013-12-31','iyyy-mm') from dual;
TO_CHAR(DATE'2013-12-29','IYYY TO_CHAR(DATE'2013-12-30','IYYY TO_CHAR(DATE'2013-12-31','IYYY
------------------------------ ------------------------------ ------------------------------
2013-12 2014-12 2014-12
Executed in 0.015 seconds
SQL> select to_char(date '2013-12-29','day'),to_char(date '2013-12-30','day'),to_char(date'2013-12-31','day'),to_char(date'2014-01-01','day') from dual;
TO_CHAR(DATE'2013-12-29','DAY' TO_CHAR(DATE'2013-12-30','DAY' TO_CHAR(DATE'2013-12-31','DAY' TO_CHAR(DATE'2014-01-01','DAY'
------------------------------ ------------------------------ ------------------------------ ------------------------------
星期日 星期一 星期二 星期三
Executed in 0.015 seconds
SQL> select to_char(date '2013-12-29','yyyy-mm'),to_char(date '2013-12-30','yyyy-mm'),to_char(date'2013-12-31','yyyy-mm') from dual;
TO_CHAR(DATE'2013-12-29','YYYY TO_CHAR(DATE'2013-12-30','YYYY TO_CHAR(DATE'2013-12-31','YYYY
------------------------------ ------------------------------ ------------------------------
2013-12 2013-12 2013-12
Executed in 0.015 seconds
通过前两上2个sql,可以知道to_char(date '2013-12-30','iyyy-mm'),to_char(date '2013-12-31','iyyy-mm')求出的年月是2014-12月,而29号是2013-12月,这里并不是说得出的结果是错误的,而是oracle是以ISO标准计算值而导致没有达到的预期结果。相对应的,第三条sql的值就没有变成2014-12,而是2013-12。所以在使用的过程中要特别注意iyyy的使用。
其次再看下周数
SQL> select to_char(date '2013-12-29','iyyy-iw'),to_char(date '2013-12-30','iyyy-iw'),to_char(date'2013-12-31','iyyy-iw') from dual;
TO_CHAR(DATE'2013-12-29','IYYY TO_CHAR(DATE'2013-12-30','IYYY TO_CHAR(DATE'2013-12-31','IYYY
------------------------------ ------------------------------ ------------------------------
2013-52 2014-01 2014-01
Executed in 0.015 seconds
SQL> select to_char(date '2013-12-29','yyyy-ww'),to_char(date '2013-12-30','yyyy-ww'),to_char(date'2013-12-31','yyyy-ww'),to_char(date'2014-01-01','yyyy-ww') from dual;
TO_CHAR(DATE'2013-12-29','YYYY TO_CHAR(DATE'2013-12-30','YYYY TO_CHAR(DATE'2013-12-31','YYYY TO_CHAR(DATE'2014-01-01','YYYY
------------------------------ ------------------------------ ------------------------------ ------------------------------
2013-52 2013-52 2013-53 2014-01
Executed in 0.031 seconds
SQL> select to_char(date '2013-12-29','day'),to_char(date '2013-12-30','day'),to_char(date'2013-12-31','day'),to_char(date'2014-01-01','day') from dual;
TO_CHAR(DATE'2013-12-29','DAY' TO_CHAR(DATE'2013-12-30','DAY' TO_CHAR(DATE'2013-12-31','DAY' TO_CHAR(DATE'2014-01-01','DAY'
------------------------------ ------------------------------ ------------------------------ ------------------------------
星期日 星期一 星期二 星期三
通过以上3个sql可以得知采用ww求周数时,周数和星期天数是对应不上的,且周数之间不存在连贯性,反观采用iw时,2013年和2014年交接时周数是连着的,且于星期数对应上,一般在开发过程中采用iw来求周数,而不是ww。
这篇关于oracle iyyy、yyyy、ww、iw之间的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15Typescript 类型教程:轻松入门与实践指南
- 2024-11-15AntDesign-icons项目实战:新手入门教程
- 2024-11-14用Scratch编写语言模型:爪爪(Clawed)式简易教程
- 2024-11-14用大型语言模型在Amazon Bedrock上分类Jira工单
- 2024-11-14从数据到行动:亚马逊Bedrock代理如何自动化复杂工作流
- 2024-11-14Databricks与优化后的Snowflake性能大比拼
- 2024-11-14亚马逊 Inspector 解析:提升您的 AWS 负载安全的利器
- 2024-11-14揭秘VS Code for Web - Azure:轻松开发云端应用的新利器
- 2024-11-14揭秘指南:如何让Databricks中的数据为最终用户所用
- 2024-11-14OpenTelemetry扩展进入CI/CD可观测性领域