欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-04-30 19:02:42
...

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

今天在存储过程中用 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

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 该月中第几个星期

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