Oracle 存储过程中的细节-日期处理
今天在存储过程中用 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 该月中第几个星期
- 上一篇: Linux 查看某一个进程占用内存情况
- 下一篇: oracle-存储过程-日期加1循环