oracle SQL里常用的时间函数
oracle时间函数(求每月第一天等等等)

四、年份加减:
Oracle并不直接提供对年份进行加减的函数,不过有了add_months和months_between函数,我们照样可以做到。
【1】为当前日期加上2年: SQL> select add_months(sysdate, 2*12) two_years_later
2 from dual;
ERROR at line 1:
ORA-01846: 周中的日无效
很奇怪!是不?明明语法没有问题,但为什么会说“周中的日无效”呢?这里就不得不说到Oracle中的语言和时区的问题了。下面这张图是使用TOAD截取出来的客户端session的语言和时区信息:
图一
从图中我们知道了客户端的语言是简体中文,日期使用的语言也是简体中文,这就是为什么上面的SQL语句出错的原因了,因为在中文中只有“星期一,星期二”这样的工作日表示,而没有“Monday,Firday”这样的写法!
TRUNC
Truncates a date/time value to a specific element
二、日期加减:
在Oralce中,对日期进行加减操作的默认单位是天,也就是说如果我们向当前日期加1的话是加上一天,而不是一秒或一小时。那么对一天中的一段时间进行加减要怎么做呢?很简单!只需将它们转化为以天为单位即可。
2 to_date('2008-01-01 01:00:00', 'yyyy-mm-dd hh:mi:ss')) result
3 from dual;
RESULT
----------
8203
months_between函数有2个参数,第一个参数是结束日期,第二个参数是开始日期,Oracle用第一个参数减去第二个参数得到月份数。所以结果有可能会是负数的。
Oracle时间日期操作函数及使用示例

Oracle时间日期操作sysdate+(5/24/60/60) 在系统时间基础上延迟5秒sysdate+5/24/60 在系统时间基础上延迟5分钟sysdate+5/24 在系统时间基础上延迟5小时sysdate+5 在系统时间基础上延迟5天add_months(sysdate,-5) 在系统时间基础上延迟5月add_months(sysdate,-5*12) 在系统时间基础上延迟5年上月末的日期:select last_day(add_months(sysdate, -1)) from dual;本月初的日期:本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual本周星期一的日期:select trunc(sysdate,'day')+1 from dualOracle 获取本周、本月、本季、本年的第一天和最后一天--本周select trunc(sysdate,'d')+1 from dual;select trunc(sysdate,'d')+7 from dual;--本月select trunc(sysdate,'mm') from dual;select last_day(trunc(sysdate)) from dual;--本季select trunc(sysdate,'Q') from dual;select add_months(trunc(sysdate,'Q'),3)-1 from dual;--本年select trunc(sysdate,'yyyy') from dual;select add_months(trunc(sysdate,'yyyy'),12)-1 from dual;-- 获取上月的开始时间和结束时间select to_char(to_date(to_char(add_months(sysdate,-1),'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual;select to_char(to_date(to_char(sysdate,'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual;-- 获取前一天的开始时间和结束时间select to_char(to_date(to_char(sysdate-1,'yyyy-mm-dd'),'yyyy-mm-dd'),'yyyy-mm-dd hh24:mi:ss') from dual;select to_char(to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd'),'yyyy-mm-dd hh24:mi:ss') from dual;-- 获取上一个小时的开始时间和结束时间select to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')-1),'yyyy-mm-dd hh24') from dual;select to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')),'yyyy-mm-dd hh24')from dual;年初至今的天数:select ceil(sysdate - trunc(sysdate, 'year')) from dual;今天是今年的第几周:select to_char(sysdate,'fmww') from dual今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual本月的天数SELECT to_char(last_day(SYSDATE),'dd') days FROM dual今年的天数select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual下个星期一的日期SELECT Next_day(SYSDATE,2) FROM dual============================================--计算工作日方法create table t(s date,e date);alter session set nls_date_format = 'yyyy-mm-dd';insert into t values('2003-03-01','2003-03-03');insert into t values('2003-03-02','2003-03-03');insert into t values('2003-03-07','2003-03-08');insert into t values('2003-03-07','2003-03-09');insert into t values('2003-03-05','2003-03-07');insert into t values('2003-02-01','2003-03-31');-- 这里假定日期都是不带时间的,否则在所有日期前加trunc即可。
SQLPLSQL日期函数总结

SQLPLSQL日期函数总结日期函数在SQL/PLSQL中用于对日期进行计算和操作。
下面是一些常用的日期函数总结。
1.SYSDATE函数:SYSDATE函数用于返回系统当前日期和时间。
它返回一个日期值,包含当前日期和时间的年、月、日、时、分和秒。
2.CURRENT_DATE函数:CURRENT_DATE函数与SYSDATE函数功能相似,返回系统当前日期,但没有时间部分。
3.CURRENT_TIMESTAMP函数:CURRENT_TIMESTAMP函数返回包含当前日期和时间的时间戳。
4.TO_DATE函数:TO_DATE函数用于将一个字符串转换为日期。
它接受两个参数:带日期的字符串和日期格式模型。
例如,TO_DATE('2024-08-15','YYYY-MM-DD')返回一个日期值。
5.TO_CHAR函数:TO_CHAR函数用于将一个日期值转换为字符串。
它接受两个参数:日期值和日期格式模型。
例如,TO_CHAR(SYSDATE,'YYYY-MM-DD')返回当前日期的字符串表示。
6.ADD_MONTHS函数:ADD_MONTHS函数用于在给定日期上添加指定的月份数。
它接受两个参数:日期值和要添加的月份数。
例如,ADD_MONTHS(SYSDATE,3)返回当前日期的三个月后的日期。
7.MONTHS_BETWEEN函数:MONTHS_BETWEEN函数用于计算两个日期之间的月份数。
它接受两个参数:两个日期值。
例如,MONTHS_BETWEEN('2024-01-01','2024-01-01')返回两个日期之间的月份数。
8.EXTRACT函数:EXTRACT函数用于从日期中提取指定的部分。
它接受两个参数:要提取的部分(如年、月、日)和日期值。
例如,EXTRACT(YEARFROMSYSDATE)返回当前日期的年份。
9.TRUNC函数:TRUNC函数用于截断日期部分,并返回一个新的日期值。
oracle sql常用函数

oracle sql常用函数Oracle SQL中有许多常用的函数,它们可以用于数据处理、计算和转换。
以下是一些常用的Oracle SQL函数:1. 字符串函数:`SUBSTR(str, start, length)`: 返回字符串str中从start位置开始的长度为length的子串。
`UPPER(str)`: 将字符串str转换为大写。
`LOWER(str)`: 将字符串str转换为小写。
`INSTR(str, substr)`: 返回子串substr在字符串str中第一次出现的位置。
2. 数值函数:`ROUND(num, decimal_places)`: 对num进行四舍五入,保留decimal_places位小数。
`TRUNC(num, decimal_places)`: 对num进行截断,保留decimal_places位小数。
`MOD(n, m)`: 返回n除以m的余数。
3. 日期函数:`SYSDATE`: 返回当前日期和时间。
`TO_CHAR(date, format)`: 将日期date按照指定的格式转换为字符串。
`MONTHS_BETWEEN(date1, date2)`: 返回date1和date2之间相差的月数。
4. 转换函数:`TO_NUMBER(str)`: 将字符串str转换为数值型。
`TO_DATE(str, format)`: 将字符串str按照指定的格式转换为日期型。
5. 聚合函数:`SUM(column)`: 计算指定列的总和。
`AVG(column)`: 计算指定列的平均值。
`COUNT(column)`: 计算指定列的行数。
6. 条件函数:`CASE WHEN condition THEN result1 ELSE result2 END`: 根据条件返回不同的结果。
以上列举的函数只是Oracle SQL中的一部分常用函数,还有许多其他函数可以根据具体的需求进行选择和应用。
oracle date函数使用方法

oracle date函数使用方法Oracle数据库中的日期函数用于处理和操作日期和时间数据。
以下是一些常用的Oracle日期函数及其使用方法:1. `SYSDATE`:返回当前系统日期和时间。
```sqlSELECT SYSDATE FROM dual;```2. `TO_DATE`:将字符串转换为日期格式。
```sqlSELECT TO_DATE('', 'YYYY-MM-DD') FROM dual;```3. `ADD_MONTHS`:在给定日期上添加指定的月份数。
```sqlSELECT ADD_MONTHS(TO_DATE('', 'YYYY-MM-DD'), 3) FROM dual; ```4. `MONTHS_BETWEEN`:返回两个日期之间的月份数。
```sqlSELECT MONTHS_BETWEEN(TO_DATE('', 'YYYY-MM-DD'), TO_DATE('', 'YYYY-MM-DD')) FROM dual;```5. `NEXT_DAY`:返回给定日期后的下一个指定工作日。
```sqlSELECT NEXT_DAY(TO_DATE('', 'YYYY-MM-DD'), 'MONDAY') FROM dual;```6. `LAST_DAY`:返回给定日期的月份的最后一天。
```sqlSELECT LAST_DAY(TO_DATE('', 'YYYY-MM-DD')) FROM dual;```7. `ROUND`:将日期舍入到指定的精度。
```sqlSELECT ROUND(TO_DATE(' 14:30:45', 'YYYY-MM-DD HH24:MI:SS'), 'MONTH') FROM dual;```8. `TRUNC`:将日期截断到指定的精度。
Oracle常用函数

句中必须要有from命令,所以oracle定义了虚拟表dual,提供一些特殊字段的查询,例如时间日期、算术运算等功能。
select sysdate from dual; selecr 1+2 from dual;*/一、时间类常用函数:①、sysdate--获取当前系统时间②、To_char(date,format) -将日期转换为字符串参数:Date:日期format:转换的格式例:select to_char(sysdate,'yyyy-mm-dd')from dual;输出:2022-4-8 --这里输出的是字符串!③、To_date(string,format) -将字符串转换为日期参数:string:日期格式的字符串format:转换的格式*需要转换为日期的字符串必须要和指定转换的格式匹配!换句话说string是根据format的格式来进行转换。
例:select to_date('2022-02-12 23:15:12','yyyy-mm-dd hh24:mi:ss')from dual;输出:2022/2/12 23:15:12 --这里输出的是日期!二、结果集操作类函数:①、decode()函数--用于将输入的数值与函数中的参数列表相比较,根据输入值返回一个对应值。
和case...when...then...else语句功能一样函数语法:decode(f,t1,j1,t2,j2,t3,j3...t(n),j(n),k)参数:f:条件(字段或运算值)t:值J:返回值K:缺省值(默认值)函数说明:t1和j2为一组,t2和j2为一组,t3和j3为一组,以此类推;当f等于t(n)数值时,则返回对应的j(n)返回值;如果f不等于任何一个t(n),则返回k缺省值特别注意:由于每个t值都对应一个j返回值,当我们设置参数个数时,f为第一个参数这是固定的,之后的两个参数为一组(t、j),最后参数只有一个时则这个参数就是缺省值k,如果参数个数没有单独的一个参数出来,则没指定k,程序会自动添加缺省值k,这个k为null值!函数案例:select decode(id,1,'返回值1',2,'返回值2',3,'返回值3','缺省值k')替换,id from text;输出:句中必须要有from命令,所以oracle定义了虚拟表dual,提供一些特殊字段的查询,例如时间日期、算术运算等功能。
Oracle日期函数中常用的几大函数

Oracle日期函数:MONTHS_BETWEEN:返回两个日期之间月份的差值1.MONTHS_BETWEEN('01-EP-95','11-JAN-94')2.===>19.6774194ADD_MONTHS:在日期上加上份数.1.ADD_MONTHS('11-JAN-94',6)2.===>'11-JUL-94'NEXT_DAY:指定日期的后一天.1.NEXT_DAY('01-SEP-95','FRIDAY')2.===>'08-SEP-95'LAST_DAY:月份中最后一天.ST_DAY('01-SEP-95)2.===>'30-SEP-95'ROUND:四舍五入日期1.ROUND('25-JUL-95','MONTH') ===>01-AUG-952.ROUND('25-JUL-95','YEAR') ===>01-JAN-96TRUNC:截断日期1.TRUNC('25-JUL-95','MONTH') ===>01-JUL-952.TRUNC('25-JUL-95','YEAR') ===>01-JAN-95Oracle日期函数包括哪些:YYYY----代表完整的年份YEAR----年份MM------两位数月份MONTH---月份的完整名称DY------每星期中天的三个字符DAY-----天的完整名称1.to_char函数1.SQL> select ename,hiredate,to_char(hiredate,'YYYY-MM-DD') from scott.emp;ENAME HIREDATE TO_CHAR(HISMITH 17-12月-80 1980-12-17ALLEN 20-2月 -81 1981-02-20WARD 22-2月 -81 1981-02-222.to_date函数1.insert into scott.emp(empno,ename,hiredate)2.* values(9004,'dtConvert',to_date('1982-05-04','YYYY-MM-DD'))3.EMPNO ENAME JOB MGR HIREDATE SAL COMM4.9004 dtConvert 04-5月 -823.NVL函数:将NULL值转换成一个实际的值(date,character和number类型可以使用)eg:NVl(comm,0) 或NVL(hiredate,'01-JAN-97')或NVL(job,'No Job Yet')文章来源:网络编辑:联动北方技术论坛(如有侵权请及时联络以便删除)。
OracleSQL函数之日期函数

OracleSQL函数之⽇期函数sysdate【功能】:返回当前⽇期。
【参数】:没有参数,没有括号【返回】:⽇期SQL> SELECT SYSDATE FROM DUAL;SYSDATE-----------2015/4/919add_months(d1,n1)【功能】:返回在⽇期d1基础上再加n1个⽉后新的⽇期。
【参数】:d1,⽇期型,n1数字型【返回】:⽇期SQL> SELECT SYSDATE,ADD_MONTHS(SYSDATE,3) FROM DUAL;SYSDATE ADD_MONTHS(SYSDATE,3)----------- ---------------------2015/4/9192015/7/919:02:59last_day(d1)【功能】:返回⽇期d1所在⽉份最后⼀天的⽇期。
【参数】:d1,⽇期型【返回】:⽇期SQL> SELECT SYSDATE,LAST_DAY(SYSDATE),LAST_DAY(TO_DATE('2015/12/01','YYYY/MM/DD')) FROM DUAL;SYSDATE LAST_DAY(SYSDATE) LAST_DAY(TO_DATE('2015/12/01',----------- ----------------- ------------------------------2015/4/9192015/4/3019:08:32015/12/31months_between(d1,d2)【功能】:返回⽇期d1到⽇期d2之间的⽉数。
【参数】:d1,d2 ⽇期型【返回】:数字如果d1>d2,则返回正数如果d1<d2,则返回负数SQL> SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('2015/01/01','YYYY/MM/DD')),MONTHS_BETWEEN(SYSDATE,TO_DATE('2015/12/31','YYYY/MM/DD')) FROM DUAL; MONTHS_BETWEEN(SYSDATE,TO_DATE MONTHS_BETWEEN(SYSDATE,TO_DATE------------------------------ ------------------------------3.28386872759857 -8.6838732078853NEW_TIME(dt1,c1,c2)【功能】:给出时间dt1在c1时区对应c2时区的⽇期和时间【参数】:dt1,d2 ⽇期型【返回】:⽇期时间【参数】:c1,c2对应的时区及其简写⼤西洋标准时间:AST或ADT阿拉斯加_夏威夷时间:HST或HDT英国夏令时:BST或BDT美国⼭区时间:MST或MDT美国中央时区:CST或CDT新⼤陆标准时间:NST美国东部时间:EST或EDT太平洋标准时间:PST或PDT格林威治标准时间:GMTYukou标准时间:YST或YDT【⽰例】SQL> SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') BJ_TIME,TO_CHAR(NEW_TIME(SYSDATE,'PDT','GMT'),'YYYY/MM/DD HH24:MI:SS') LOS_ANGLES FROM DUAL; BJ_TIME LOS_ANGLES------------------- -------------------2015/04/0919:17:062015/04/1002:17:06round(d1[,c1])【功能】:给出⽇期d1按期间(参数c1)四舍五⼊后的期间的第⼀天⽇期(与数值四舍五⼊意思相近)【参数】:d1⽇期型,c1为字符型(参数),c1默认为j(即最近0点⽇期)【参数表】:c1对应的参数表:最近0点⽇期: 取消参数c1或j最近的星期⽇:day或dy或d最近⽉初⽇期:month或mon或mm或rm最近季⽇期:q最近年初⽇期:syear或year或yyyy或yyy或yy或y(多个y表⽰精度)最近世纪初⽇期:cc或scc【返回】:⽇期【⽰例】SQL> select sysdate 当时⽇期,2 round(sysdate) 最近0点⽇期,3 round(sysdate,'day') 最近星期⽇,4 round(sysdate,'month') 最近⽉初,5 round(sysdate,'q') 最近季初⽇期,6 round(sysdate,'year') 最近年初⽇期from dual;当时⽇期最近0点⽇期最近星期⽇最近⽉初最近季初⽇期最近年初⽇期----------- ----------- ----------- ----------- ------------ ------------2015/4/9192015/4/102015/4/122015/4/12015/4/12015/1/1trunc(d1[,c1])【功能】:返回⽇期d1所在期间(参数c1)的第⼀天⽇期【参数】:d1⽇期型,c1为字符型(参数),c1默认为j(即当前⽇期)【参数表】:c1对应的参数表:最近0点⽇期: 取消参数c1或j最近的星期⽇:day或dy或d (每周顺序:⽇,⼀,⼆,三,四,五,六)最近⽉初⽇期:month或mon或mm或rm最近季⽇期:q最近年初⽇期:syear或year或yyyy或yyy或yy或y(多个y表⽰精度)最近世纪初⽇期:cc或scc【返回】:⽇期【⽰例】SQL> select sysdate 当时⽇期,2 trunc(sysdate) 今天⽇期,3 trunc(sysdate,'day') 本周星期⽇,4 trunc(sysdate,'month') 本⽉初,5 trunc(sysdate,'q') 本季初⽇期,6 trunc(sysdate,'year') 本年初⽇期from dual;当时⽇期今天⽇期本周星期⽇本⽉初本季初⽇期本年初⽇期----------- ----------- ----------- ----------- ----------- -----------2015/4/9192015/4/92015/4/52015/4/12015/4/12015/1/1【功能】:返回⽇期d1在下周,星期⼏(参数c1)的⽇期【参数】:d1⽇期型,c1为字符型(参数),c1默认为j(即当前⽇期)【参数表】:c1对应:星期⼀,星期⼆,星期三……星期⽇【返回】:⽇期SQL> select sysdate 当时⽇期,2 next_day(sysdate,'星期⼀') 下周星期⼀,3 next_day(sysdate,'星期⼆') 下周星期⼆,4 next_day(sysdate,'星期三') 下周星期三,5 next_day(sysdate,'星期四') 下周星期四,6 next_day(sysdate,'星期五') 下周星期五,7 next_day(sysdate,'星期六') 下周星期六,8 next_day(sysdate,'星期⽇') 下周星期⽇from dual;当时⽇期下周星期⼀下周星期⼆下周星期三下周星期四下周星期五下周星期六下周星期⽇----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------2015/4/9192015/4/1312015/4/1412015/4/1512015/4/1612015/4/1012015/4/1112015/4/121 extract(c1 from d1)【功能】:⽇期/时间d1中,参数(c1)的值【参数】:d1⽇期型(date)/⽇期时间型(timestamp),c1为字符型(参数)【参数表】:c1对应的参数表详见⽰例SQL> select2 extract(hour from timestamp '2001-2-16 2:38:40 ' ) ⼩时,3 extract(minute from timestamp '2001-2-16 2:38:40 ' ) 分钟,4 extract(second from timestamp '2001-2-16 2:38:40 ' ) 秒,5 extract(DAY from timestamp '2001-2-16 2:38:40 ' ) ⽇,6 extract(MONTH from timestamp '2001-2-16 2:38:40 ' ) ⽉,7 extract(YEAR from timestamp '2001-2-16 2:38:40 ' ) 年8from dual;⼩时分钟秒⽇⽉年---------- ---------- ---------- ---------- ---------- ----------238401622001SQL> select extract(YEAR from date '2015-04-10') from dual;EXTRACT(YEARFROMDATE'2015-04-1------------------------------2015SQL> select extract(day from sysdate),extract(month from sysdate),extract(year from sysdate) from dual; EXTRACT(DAYFROMSYSDATE) EXTRACT(MONTHFROMSYSDATE) EXTRACT(YEARFROMSYSDATE) ----------------------- ------------------------- ------------------------942015SQL> select sysdate 当前时间,2 extract(DAY from sysdate ) ⽇,3 extract(MONTH from sysdate ) ⽉,4 extract(YEAR from sysdate ) 年5from dual;当前时间⽇⽉年----------- ---------- ---------- ----------2015/4/920942015localtimestamp【功能】:返回客户端会话中本地的⽇期和时间【参数】:没有参数,没有括号【返回】:⽇期SQL> select localtimestamp from dual;LOCALTIMESTAMP--------------------------------------------------------------------------------10-4⽉ -1511.56.46.224832上午current_timestamp【功能】:以timestamp with time zone数据类型返回当前会话时区中的当前⽇期【参数】:没有参数,没有括号【返回】:⽇期SQL> select current_timestamp from dual;CURRENT_TIMESTAMP--------------------------------------------------------------------------------10-4⽉ -1511.56.02.361761上午 +08:00current_date【功能】:返回当前会话时区中的当前⽇期【参数】:没有参数,没有括号【返回】:⽇期SQL> select current_date from dual;CURRENT_DATE------------2015/4/1011dbtimezone【功能】:返回时区【参数】:没有参数,没有括号【返回】:字符型SQL> select dbtimezone from dual;DBTIMEZONE----------+00:00SESSIONTIMEZONE【功能】:返回会话时区【参数】:没有参数,没有括号【返回】:字符型SQL> select sessiontimezone from dual;SESSIONTIMEZONE---------------------------------------------------------------------------+08:00INTERVAL c1 set1【功能】:变动⽇期时间数值【参数】:c1为数字字符串或⽇期时间字符串,set1为⽇期参数【参数表】:set1具体参照⽰例【返回】:⽇期时间格式的数值,前⾯多个+号以天或天更⼩单位时可⽤数值表达式借⽤,如1表⽰1天,1/24表⽰1⼩时,1/24/60表⽰1分钟【⽰例】SQL> select3 trunc(sysdate)+(interval '1' second), --加1秒(1/24/60/60)4 trunc(sysdate)+(interval '1' minute), --加1分钟(1/24/60)5 trunc(sysdate)+(interval '1' hour), --加1⼩时(1/24)6 trunc(sysdate)+(INTERVAL '1' DAY), --加1天(1)7 trunc(sysdate)+(INTERVAL '1' MONTH), --加1⽉8 trunc(sysdate)+(INTERVAL '1' YEAR), --加1年9 trunc(sysdate)+(interval '01:02:03' hour to second), --加指定⼩时到秒10 trunc(sysdate)+(interval '01:02' minute to second), --加指定分钟到秒11 trunc(sysdate)+(interval '01:02' hour to minute), --加指定⼩时到分钟12 trunc(sysdate)+(interval '2 01:02' day to minute) --加指定天数到分钟13from dual;SYSDATE TRUNC(SYSDATE)+(INTERVAL'1'SEC TRUNC(SYSDATE)+(INTERVAL'1'MIN TRUNC(SYSDATE)+(INTERVAL'1'HOU TRUNC(SYSDATE)+(INTERVAL'1'DAY TRUNC(SYSDATE)+(INTERVAL'1'MON TRUNC(SYSDATE)+(INTERVAL'1'YEA TRUNC(SYSDATE)+(INTERVAL'01:02 TRUNC(SYSDATE)+(INTERVAL'01:02 TRUNC(SYSDATE)+(INTERVAL'01:02 TRUNC(SYSDATE)+(INTERVAL'201:0----------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------2015/4/9212015/4/90:00:012015/4/90:01:002015/4/91:00:002015/4/102015/5/92016/4/92015/4/91:02:03。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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,即为查找当前月份的前三个月中的每周五的日期。