当前位置:文档之家› oracle SQL里常用的时间函数

oracle SQL里常用的时间函数

oracle SQL里常用的时间函数,经典推荐相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。

那在oracle 中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。

常用日期型函数1。

Sysdate 当前日期和时间SQL> Select sysdate from dual;SYSDATE----------21-6月-052。

Last_day 本月最后一天SQL> Select last_day(sysdate) from dual;LAST_DAY(S----------30-6月-053。

Add_months(d,n) 当前日期d后推n个月用于从一个日期值增加或减少一些月份date_value:=add_months(date_value,number_of_months)SQL> Select add_months(sysdate,2) from dual;ADD_MONTHS----------21-8月-054。

Months_between(f,s) 日期f和s间相差月数SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))fro m dual;MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-D D'))-----------------------------------------------------------4.69667415。

NEXT_DAY(d, day_of_week)返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。

参数"day_of_week"必须为该星期中的某一天。

SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual;NEXT_DAY(T----------26-6月-056。

current_date()返回当前会话时区中的当前日期date_value:=current_dateSQL> column sessiontimezone for a15SQL> select sessiontimezone,current_date from dual;SESSIONTIMEZONE CURRENT_DA--------------- ----------+08:00 13-11月-03SQL> alter session set time_zone='-11:00' 2 /会话已更改。

SQL> select sessiontimezone,current_timestamp from dual;SESSIONTIMEZONE CURRENT_TIMESTAMP--------------- -------------------------------------11:00 12-11月-03 04.59.13.668000 下午-11:007。

current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期SQL> select current_timestamp from dual;CURRENT_TIMESTAMP---------------------------------------------------------------------------21-6月-05 10.13.08.220589 上午+08:008。

dbtimezone()返回时区SQL> select dbtimezone from dual;DBTIME-------08:009。

extract()找出日期或间隔值的字段值date_value:=extract(date_field from [datetime_value|interval_value])SQL> select extract(month from sysdate) "This Month" from dual;This Month----------6SQL> select extract(year from add_months(sysdate,36)) " Years" from dual;Years----------200810。

localtimestamp()返回会话中的日期和时间SQL> select localtimestamp from dual;LOCALTIMESTAMP---------------------------------------------------------------------------21-6月-05 10.18.15.855652 上午常用日期数据格式(该段为摘抄)Y或YY或YYY 年的最后一位,两位或三位Selectto_char(sysdate,’YYY’) from dual;002表示2002年SYEAR或YEAR SYEAR使公元前的年份前加一负号Select to_char(sysdate,’SYEAR’) from dual;-1112表示公元前111 2年Q 季度,1~3月为第一季度Select to_char(sysdate,’Q’) from dual;2表示第二季度①MM 月份数Select to_char(sysdate,’MM’) from dual;12表示12月RM 月份的罗马表示Select to_char(sysdate,’RM’) from dual;IV表示4月Month 用9个字符长度表示的月份名Select to_char(sysdate,’Month’) from dual;May后跟6个空格表示5月WW 当年第几周Select to_char(sysdate,’WW’) from dual;24表示2002年6月13日为第24周W 本月第几周Select to_char(sysdate,’W’) from dual;2002年10月1日为第1周DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual;363 2002年1 2月2 9日为第363天DD 当月第几天Select to_char(sysdate,’DD’) from dual;04 10月4日为第4天D 周内第几天Select to_char(sysdate,’D’) from dual;5 2002年3月14日为星期一DY 周内第几天缩写Select to_char(sysdate,’DY’) from dual;SUN2002年3月24日为星期天HH或HH12 12进制小时数Select to_char(sysdate,’HH’) from dual;02 午夜2点过8分为02HH24 24小时制Select to_char(sysdate,’HH24’) from dual;14 下午2点08分为14MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual;17下午4点17分SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual;22 11点3分22秒提示注意不要将MM格式用于分钟(分钟应该使用MI)。

MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

现在给出一些实践后的用法:1。

上月末天:SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;LASTDAY----------2005-05-312。

上月今天SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;PRETODAY----------2005-05-213.上月首天SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;FIRSTDAY----------2005-05-014.按照每周进行统计SQL> select to_char(sysdate,'ww') from dual group byto_char(sysdate,'ww');TO--255。

按照每月进行统计SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');TO--066。

按照每季度进行统计SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');T-27。

按照每年进行统计SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');TO_C----20058.要找到某月中所有周五的具体日期select to_char(t.d,'YY-MM-DD') from (select trunc(sysdate, 'MM')+rownum-1 as dfrom dba_objectswhere rownum < 32) twhere to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期and trim(to_char(t.d, 'Day')) = '星期五'--------03-05-0203-05-0903-05-1603-05-2303-05-30如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。

相关主题