Oracle 存储过程中的细节-日期处理

来源:互联网 发布:万网域名要备案吗 编辑:程序博客网 时间:2024/05/04 20:32

   今天在存储过程中用 to_char来查询制定日期是星期几,本以为时没什么问题的,结果出现了自己不想要的问题。

   select    to_char(sysdate,'day','NLS_DATE_LANGUAGE=AMERICAN')  day 

       into    v_day

     from    dual ; 

      注意:返回值是英文,比如:saturday,sunday

      在v_day中,调试后发现竟然后空格,存储过程中的细节之一就是字符串变量还是统一用trim来处理下,其实加trim处理不怎么影响性能的微笑

      另外参数'NLS_DATE_LANGUAGE=AMERICAN'  适合在不同点数据库编码字符集中使用,如果不加,默认会显示中文的星期几:

       SQL>   select   to_char(sysdate,'day')   from   dual;
  
               TO_CHAR(SYSDATE,'DAY')
                  ----------------------
                      星期五

 

下面补充一些其他的to_char实现的日期相关的用途:

          1.--取得当前日期是本月的第几周:  

               SQL>   select   to_char(sysdate,'W')   T from   dual; 
                            T
                            -
                            4

         2.--取得当前日期是一个星期中的第几天,注意星期日是第一天

          SQL> select   sysdate,to_char(sysdate,'D')  T  from   dual;
  
                 SYSDATE                         T 
             ----------------------------          -
            2012-11-23 10:11:52          6

         3. -- 得到小时的具体数值
       SQL> select trunc(sysdate) + 1/24 from dual;
 
              TRUNC(SYSDATE)+1/24
                    -------------------
                 2012-11-23 1:00:00

4. 得到一年的每一天
       select trunc(sysdate, 'yyyy') + rn - 1 date0
         from (select rownum rn from all_objects where rownum < 366);

5.返回当前月的最后一天
        select last_day(sysdate) from dual;      
        select last_day(trunc(sysdate)) from dual;
        select trunc(last_day(sysdate)) from dual;
        select trunc(add_months(sysdate,1),'mm') - 1 from dual;

6.获取本周一,周日的日期
        select trunc(sysdate,'d')+1,trunc(sysdate,'d')+7 from dual;

7.判断某一日子所在年分是否为润年
       select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;

8.判断两年后是否为润年
        select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual;

9.得到日期的季度
       select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;
       select to_char(sysdate, 'Q') from dual;

 

 

 

 

类似:

select   to_char(sysdate,'yyyy')   from   dual;   --年
select   to_char(sysdate,'Q'   from   dual;           --季
select   to_char(sysdate,'mm')   from   dual;       --月
select   to_char(sysdate,'dd')   from   dual;       --日
ddd   年中的第几天
WW   年中的第几个星期
W   该月中第几个星期

 

                   

 

 

 

 

 

原创粉丝点击