oracle查询本月第一天_oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...

本文主要介绍了Oracle数据库中日期函数的使用,包括trunc()函数对日期和数字的处理,以及日期和字符转换函数to_date、to_char的用法。还讲解了如何计算本月第一天、最后一天,两个日期间的天数、月数,以及处理不同日期格式冲突等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天",

to_char(last_day(sysdate), 'yyyy-mm-dd') "本月最后一天"

--Oracle trunc()函数的用法

/**************日期********************/

1.select trunc(sysdate) from dual  --2011-3-18  今天的日期为2011-3-18

2.select trunc(sysdate, 'mm')   from   dual  --2011-3-1    返回当月第一天.

3.select trunc(sysdate,'yy') from dual  --2011-1-1       返回当年第一天

4.select trunc(sysdate,'dd') from dual  --2011-3-18    返回当前年月日

5.select trunc(sysdate,'yyyy') from dual  --2011-1-1   返回当年第一天

6.select trunc(sysdate,'d') from dual  --2011-3-13 (星期天)返回当前星期的第一天

7.select trunc(sysdate, 'hh') from dual   --2011-3-18 14:00:00   当前时间为14:41

8.select trunc(sysdate, 'mi') from dual  --2011-3-18 14:41:00   TRUNC()函数没有秒的精确

/***************数字********************/

/*

TRUNC(number,num_digits)

Number 需要截尾取整的数字。

Num_digits 用于指定取整精度的数字。Num_digits 的默认值为0。

TRUNC()函数截取时不进行四舍五入

*/

9.select trunc(123.458) from dual --123

10.select trunc(123.458,0) from dual --123

11.select trunc(123.458,1) from dual --123.4

12.select trunc(123.458,-1) from dual --120

13.select trunc(123.458,-4) from dual --0

14.select trunc(123.458,4) from dual  --123.458

15.select trunc(123) from dual  --123

16.select trunc(123,1) from dual --123

17.select trunc(123,-1) from dual --120

select to_char(sysdate,'yyyy/mm')||'/01' from dual                           日期函數 1、        日期和字符转换函数用法(to_date,to_char) 。 2、        求某天是星期几方法: a、select to_char(to_date('2004-12-27','yyyy-mm-dd'),'day') from dual;   顯示結果:Monday b、select to_char(sysdate,'day') from dual;   顯示結果:Monday 3、        两个日期间的天数 select floor(sysdate -to_date('2002/04/05','yyyy/mm/dd')) from dual;   4、        时间为null的用法 注意要用TO_DATE(null); 5、本月有多少天 select floor(last_day(sysdate)-add_months(last_day(sysdate) +1, -1)) from dual 6、求本天是本周的第幾天 a、        select to_char(sysdate,'d') from dual; b、        select to_char(sysdate,'yyyy') from dual; c、        select to_char(sysdate,'mm') from dual; 7、求兩個日期間的月數 select floor(months_between(to_date('03-25-1999','MM-DD-YYYY'),   to_date('12-31-1998','MM-DD-YYYY'))) "MONTHS" FROM DUAL TO_DATE格式   Day:   dd number 12   dy abbreviated fri   day spelled out friday   ddspth spelled out, ordinal twelfth   Month:   mm number 03   mon abbreviated mar   month spelled out march   Year:   yy two digits 98   yyyy four digits 1998   24小时格式下时间范围为: 0:00:00 - 23:59:59....   12小时格式下时间范围为: 1:00:00 - 12:59:59 ....   1.   日期和字符转换函数用法(to_date,to_char)   2.   select to_char( to_date(222,'J'),'Jsp') from dual   显示Two Hundred Twenty-Two   3.   求某天是星期几   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;   星期一   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;   monday   设置日期语言   ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';   也可以这样   TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')   4.   两个日期间的天数   select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;   5. 时间为null的用法   select id, active_date from table1   UNION   select 1, TO_DATE(null) from dual;   注意要用TO_DATE(null)   6.   a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')   那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。   所以,当时间需要精确的时候,觉得to_char还是必要的   7. 日期格式冲突问题   输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'   alter system set NLS_DATE_LANGUAGE = American   alter session set NLS_DATE_LANGUAGE = American   或者在to_date中写   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;   注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,   可查看   select * from nls_session_parameters   select * from V$NLS_PARAMETERS   8.   select count(*)   from ( select rownum-1 rnum   from all_objects   where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-   02-01','yyyy-mm-dd')+1   )   where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )   not   in ( '1', '7' )   查找2002-02-28至2002-02-01间除星期一和七的天数   在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).   9.   select months_between(to_date('01-31-1999','MM-DD-YYYY'),   to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;   1   select months_between(to_date('02-01-1999','MM-DD-YYYY'),   to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;   1.03225806451613   10. Next_day的用法   Next_day(date, day)   Monday-Sunday, for format code DAY   Mon-Sun, for format code DY   1-7, for format code D   11   select to_char(sysdate,'hh:mi:ss') TIME from all_objects   注意:第一条记录的TIME 与最后一行是一样的   可以建立一个函数来处理这个问题   create or replace function sys_date return date is   begin   return sysdate;   end;   select to_char(sys_date,'hh:mi:ss') from all_objects;   12.   获得小时数   SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer   SQL> select sysdate ,to_char(sysdate,'hh') from dual;   SYSDATE TO_CHAR(SYSDATE,'HH')   -------------------- ---------------------   2003-10-13 19:35:21 07   SQL> select sysdate ,to_char(sysdate,'hh24') from dual;   SYSDATE TO_CHAR(SYSDATE,'HH24')   -------------------- -----------------------   2003-10-13 19:35:21 19   获取年月日与此类似   13.   年月日的处理   select older_date,   newer_date,   years,   months,   abs(   trunc(   newer_date-   add_months( older_date,years*12+months )   )   ) days   from ( select   trunc(months_between( newer_date, older_date )/12) YEARS,   mod(trunc(months_between( newer_date, older_date )),   12 ) MONTHS,   newer_date,   older_date   from ( select hiredate older_date,   add_months(hiredate,rownum)+rownum newer_date   from emp )   )   14.   处理月份天数不定的办法   select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual   16.   找出今年的天数   select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual   闰年的处理方法   to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )   如果是28就不是闰年   17.   yyyy与rrrr的区别   'YYYY99 TO_C   ------- ----   yyyy 99 0099   rrrr 99 1999   yyyy 01 0001   rrrr 01 2001   18.不同时区的处理   select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate   from dual;   19.   5秒钟一个间隔   Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')   from dual   2002-11-1 9:55:00 35786   SSSSS表示5位秒数   20.   一年的第几天   select TO_CHAR(SYSDATE,'DDD'),sysdate from dual   310 2002-11-6 10:03:51   21.计算小时,分,秒,毫秒   select   Days,   A,   TRUNC(A*24) Hours,   TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,   TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,   TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds   from   (   select   trunc(sysdate) Days,   sysdate - trunc(sysdate) A   from dual   )   select * from tabname   order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');   //   floor((date2-date1) /365) 作为年   floor((date2-date1, 365) /30) 作为月   mod(mod(date2-date1, 365), 30)作为日.   23.next_day函数   next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。   1 2 3 4 5 6 7   日 一 二 三 四 五 六

http://bbs.youkuaiyun.com/topics/350171876

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值