1. 查看数据库字符集(如果字符集不同,可能显示乱码)

select DECODE(parameter,
'NLS_TERRITORY',
'TERRITORY',
'NLS_LANGUAGE',
'LANGUAGE',
'NLS_CHARACTERSET',
'CHARACTER SET') name,
value
from v$nls_parameters
WHERE parameter IN ('NLS_TERRITORY', 'NLS_LANGUAGE', 'NLS_CHARACTERSET')

2.  查看数据库中指定日期为周几

create or replace function Get_weekday(pDate date) return number is
vResult number;
begin
select case to_char(pDate, 'FmDay', 'nls_date_language=english')
when 'Monday' then
1
when 'Tuesday' then
2
when 'Wednesday' then
3
when 'Thursday' then
4
when 'Friday' then
5
when 'Saturday' then
6
when 'Sunday' then
7
end d
into vResult
from dual;
return vResult;
end;

不推荐(根据NLS设置不同结果不同,例如周一为第一天和周日为第一天的Weekday结果不同) 

select sysdate Today,
to_char(sysdate, 'D') Weekday,
trunc(sysdate, 'DD') - to_char(sysdate, 'D') + 1 WeekFirstDay,
trunc(sysdate, 'DD') - to_char(sysdate, 'D') + 7 WeekLastDay
from dual;

3. Oracle 中关于星期(IW和WW)的算法

Oracle中对于星期的计算规则中,其中关于计算本周是一年的第几周,有两种格式,IW和WW,其中的区别官方文档解释如下:

  • IW:基于 ISO标准计算出来的该年的第几周(1-52 or 1-53) 。
  • WW:该年的第几周(1-53),其中第1周指该年的第1天至第7天。

从文档中可以看出,WW的算法是: int(dayOfYear+6)/7,个人觉得这种算法有点“2”。相信一般情况下,我们不会使用WW的吧,应该IW使用的比较多。
关于Oracle提到的这个星期的计算ISO标准,是这样的:

  • 每个星期总是从周一开始,周日结束。
  • 如果1月1日是周五、周六或周日,则这一周算为上一年的最后一周,因为这周的大部分时间属于上一年。
  • 如果1月1日是周一、周二、周三或周四,则这一周算为新年的第一周,因为这周的大部分时间属于新的一年。

下面这两张表格,是从Oracle官方文档中截取出来的:

Table 3-7 First ISO Week of the Year: Example 1, January 1998

Mo Tu We Th Fr Sa Su ISO Week
- - - 1 2 3 4 First ISO week of 1998
5 6 7 8 9 10 11 Second ISO week of 1998
12 13 14 15 16 17 18 Third ISO week of 1998
19 20 21 22 23 24 25 Fourth ISO week of 1998
26 27 28 29 30 31 - Fifth ISO week of 1998

Table 3-8 First ISO Week of the Year: Example 2, January 1999

Mo Tu We Th Fr Sa Su ISO Week
- - - - 1 2 3 Fifty-third ISO week of 1998
4 5 6 7 8 9 10 First ISO week of 1999
11 12 13 14 15 16 17 Second ISO week of 1999
18 19 20 21 22 23 24 Third ISO week of 1999
25 26 27 28 29 30 31 Fourth ISO week of 1999

从表中可以看出,按照ISO标准算法,同样是1月1日,1998年是算第一周,而1999年的1月1日却算为上一年的最后一周。

这里需要注意的是,ISO标准中星期的第一天是周一,而Oracle中其他一些日期处理算法中(如D),默认每周的第一天是周日。因为第一天是周日还是周一,由参数NLS_TERRITORY决定,而该参数的默认值是从NLS_LANG继承过来的,NLS_LANG默认值为AMERICA,因此默认周日是每周的第一天)。
我们很多人认为中国人每周第一天从周一开始,其实不是这样哦,从Oracle上可以看出来,其实我国的每周第一天仍然是周日,与美国一致,只有德国、法国等一些欧洲国家是从周一开始的:

SQL> select to_char(sysdate,’yyyymmdd’) from dual;

TO_CHAR(
——–
20110901 SQL> ALTER SESSION SET NLS_TERRITORY=AMERICA; Session altered. SQL> select to_char(sysdate,’d') from dual; T
-
5 SQL> ALTER SESSION SET NLS_TERRITORY=China; Session altered. SQL> select to_char(sysdate,’d') from dual; T
-
5 SQL> ALTER SESSION SET NLS_TERRITORY=GERMANY; Session altered. SQL> select to_char(sysdate,’d') from dual; T
-
4

参考资料

http://www.dw4e.com/?p=108
https://community.oracle.com/message/9511573#9511573

[Oracle] - 关于星期(IW和WW)的算法的更多相关文章

  1. 学习Oracle一个星期以来的总结

    公司开发部门主要分2部分:.net开发和Oracle PL\SQL开发.刚入职的我被分到Oracle PL\SQL组了.Oracle是比SQL Server更大的数据库应用,我在学校只接触过SQL S ...

  2. oracle 获取星期日期

    oracle 中的计算如下: 计算本星期的起始结束日期--得到星期一的日期select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+2 from dual ...

  3. Oracle打印日历功能

    Oracle用SQL打印日历 1.1  打印当月日历 , D, NULL)) SUN, , D, NULL)) MON, , D, NULL)) TUE, , D, NULL)) WED, , D,  ...

  4. 关于Oracle to_char()函数中的IW,WW 周别显示

    1)ww的算法为每年1月1日为第一周开始,date+6为每一周结尾 例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107 公式 每周第一天 :date + ...

  5. Oracle日期周详解IW

    1 ORACLE中周相关知识描述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串.X是一个日期,FORMAT是一个规定了X采用 ...

  6. [转载]Oracle日期周详解IW

    1 ORACLE中周相关知识描述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串.X是一个日期,FORMAT是一个规定了X采用 ...

  7. oracle得到日期对应的星期

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp56   select to_char(sysdate,'ww') fro ...

  8. 转:Oracle日期周详解以及周开始结束时间计算

    目录(?)[-] ORACLE中周相关知识描述 日期格式化函数 日期时间运算函数 根据给定时间取一周的开始时间和结束时间 根据给定周数取一周的开始时间和结束时间 获取一年的最大周次 特别应该注意的地方 ...

  9. Oracle日期周具体解释以及周開始结束时间计算

    1 ORACLE中周相关知识描写叙述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串. X是一个日期,FORMAT是一个规定了 ...

随机推荐

  1. 读取中文文件到CString

      CString strFileName = _T("D:\\ai\\100.json"); CFile file; file.Open(strFileName, CFile:: ...

  2. 第2组 团队Git现场编程实战

    目录 组员职责分工(1 2分) github 的提交日志截图(2 1分) 程序运行截图(3 3分) 程序运行环境(4 1分) GUI界面(5 5分) 基础功能实现(6 10分) 鼓励有想法且有用的功能 ...

  3. Unity火爆插件Behavior Designer行为树插件学习

    如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现, 但是再复杂的一般用经典的状态机来切换状态,但是写起来比较麻烦.相对的,行为树(Behavior T ...

  4. 详解Unity Profiler内存分析问题

    在使用Unity开发游戏的过程中,借助Profiler来分析内存使用状况是至关重要的.但许多开发者可能还对Profiler中各项数据表示的含义不甚明确,今天我们Unity官方的技术工程师柳振东,将针对 ...

  5. strace命令 二

    让我们看一台高负载服务器的 top 结果: top 技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序. 在本例中大家很容易发现 CPU 主要是被若干个 PHP ...

  6. postgre查询表和记录数,查表字段

    select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind = 'r' and relnamesp ...

  7. Netty服务器连接池管理设计思路

    应用场景: 在RPC框架中,使用Netty作为高性能的网络通信框架时,每一次服务调用,都需要与Netty服务端建立连接的话,很容易导致Netty服务器资源耗尽.所以,想到连接池技术,将与同一个Nett ...

  8. 十一、postman接口测试(安装nodejs和npm)

    cmder安装:https://cmder.net/ node安装:https://nodejs.org/zh-cn/ 打开cmd命令,在命令提示窗输入 npm install -g cnpm --r ...

  9. Python3基础 交换两个变量的值

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  10. ES6深入浅出-9 Promise-3.Promise的细节

    await 拿到用户信息,函数前面加await await等待Promise成功或者失败. 如果Promise里面失败了 什么也拿不到.报了一个错误,叫做不认识. 如果想拿到正常错误,就绪try一下 ...