zoukankan      html  css  js  c++  java
  • [Oracle]

    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

    MoTuWeThFrSaSuISO 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

    MoTuWeThFrSaSuISO 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

  • 相关阅读:
    依赖反转Ioc和unity,autofac,castle框架教程及比较
    webform非表单提交时防xss攻击
    tfs分支操作
    防火墙入站出站规则配置
    前端流程图jsplumb学习笔记
    Js闭包学习笔记
    word中加入endnote
    Rest概念学习
    DRF的版本、认证、权限
    博客园自动生成目录
  • 原文地址:https://www.cnblogs.com/jinzesudawei/p/7910187.html
Copyright © 2011-2022 走看看