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

2014-11-24 18:25:11 · 作者: · 浏览: 0

今天在存储过程中用 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 该月中第几个星期