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。
Oracle时间函数
LASTDAY
----------
2005-05-31
2。上月今天
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
PRETODAY
----------
2、日期运算时是以天为单位进行的
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可
4、进行时间进制转换时注意加括号,否则会出问题
SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';
会话已更改。
LAST_DAY(S
----------
30-6月 -05
3。Add_months(d,n) 当前日期d后推n个月
用于从一个日期值增加或减少一些月份
date_value:=add_months(date_value,number_of_months)
SQL> Select add_months(sysdate,2) from dual;
2005-05-21
3.上月首天
SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
FIRSTDAY
----------
2005-05-01
4.按照每周进行统计
ADD_MONTHS
----------
21-8月 -05
ORACLE时间函数(SYSDATE)深入理解
ORACLE时间函数(SYSDATE)深⼊理解ORACLE时间函数(SYSDATE)深⼊理解加法select sysdate,add_months(sysdate,12) from dual; --加1年select sysdate,add_months(sysdate,1) from dual; --加1⽉select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1⼩时select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒减法select sysdate,add_months(sysdate,-12) from dual; --减1年select sysdate,add_months(sysdate,-1) from dual; --减1⽉select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1⼩时select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒ORACLE时间函数(SYSDATE)简析1:取得当前⽇期是本⽉的第⼏周SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual;TO_CHAR(SYSDATE,'YY-------------------20030327 4 18:16:09SQL> select to_char(sysdate,'W') from dual;T-42:取得当前⽇期是⼀个星期中的第⼏天,注意星期⽇是第⼀天SQL> select sysdate,to_char(sysdate,'D') from dual;SYSDATE T--------- -27-MAR-03 5 类似: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 该⽉中第⼏个星期D 周中的星期⼏hh ⼩时(12)hh24 ⼩时(24)Mi 分ss 秒3:取当前⽇期是星期⼏中⽂显⽰:SQL> select to_char(sysdate,'day') from dual;TO_CHAR(SYSDATE,'DAY')----------------------星期四4:如果⼀个表在⼀个date类型的字段上⾯建⽴了索引,如何使⽤alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'5: 得到当前的⽇期select sysdate from dual;6: 得到当天凌晨0点0分0秒的⽇期select trunc(sysdate) from dual;-- 得到这天的最后⼀秒select trunc(sysdate) + 0.99999 from dual;-- 得到⼩时的具体数值select trunc(sysdate) + 1/24 from dual;select trunc(sysdate) + 7/24 from dual;7.得到明天凌晨0点0分0秒的⽇期select trunc(sysdate+1) from dual;select trunc(sysdate)+1 from dual;8: 本⽉⼀⽇的⽇期select trunc(sysdate,'mm') from dual;9:得到下⽉⼀⽇的⽇期select trunc(add_months(sysdate,1),'mm') from dual;10:返回当前⽉的最后⼀天?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;11: 得到⼀年的每⼀天select trunc(sysdate,'yyyy')+ rn -1 date0from(select rownum rn from all_objectswhere rownum<366);12:今天是今年的第N天SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;13:如何在给现有的⽇期加上2年select add_months(sysdate,24) from dual;14:判断某⼀⽇⼦所在年分是否为润年select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;15:判断两年后是否为润年select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual; 16:得到⽇期的季度select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;select to_char(sysdate, 'Q') from dual;。
ORACLE日期时间函数大全
ORACLE日期时间函数大全ORACLE日期时间函数大全TO_DATE格式(以时间:2007-11-02 13:45:25为例)Year:yy two digits 两位年显示值:07yyy three digits 三位年显示值:007yyyy four digits 四位年显示值:2007Month:mm number 两位月显示值:11mon abbreviated 字符集表示显示值:11月,若是英文版,显示nov month spelled out 字符集表示显示值:11月,若是英文版,显示novemberDay:dd number 当月第几天显示值:02ddd number 当年第几天显示值:02dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示friday spelled out 当周第几天全写显示值:星期五,若是英文版,显示fridayddspth spelled out, ordinal twelfthHour:hh two digits 12小时进制显示值:01hh24 two digits 24小时进制显示值:13Minute:mi two digits 60进制显示值:45Second:ss two digits 60进制显示值:25其它Q digit 季度显示值:4WW digit 当年第几周显示值:44W digit 当月第几周显示值:124小时格式下时间范围为: 0:00:00 - 23:59:59....12小时格式下时间范围为: 1:00:00 - 12:59:59 ....1. 日期和字符转换函数用法(to_date,to_char)select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//2.select to_char( to_date(222,'J'),'Jsp') from dual显示Two Hundred Twenty-Two3.求某天是星期几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 table1UNIONselect 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点之前是不包含在这个范围之内的。
SQL日期函数daymonthyear各种使用方法
SQL日期函数daymonthyear各种使用方法1. day(函数:- day(date): 返回指定日期中的天数。
- 示例:SELECT day('2024-09-01'); 返回结果为12. month(函数:- month(date): 返回指定日期中的月份。
- 示例:SELECT month('2024-09-01'); 返回结果为93. year(函数:- year(date): 返回指定日期中的年份。
- 示例:SELECT year('2024-09-01'); 返回结果为2024在使用day(、month(、year(函数时,需要注意以下几点:1.日期格式:-在使用这些函数之前,需要确保传递的日期参数是有效的日期格式,通常是YYYY-MM-DD。
-若日期格式不正确,函数可能会返回错误或无效的结果。
2.使用数据库特定的日期函数:-不同的数据库管理系统可能有不同的日期函数语法和用法。
-在编写SQL查询时,需要根据所使用的数据库系统来使用正确的日期函数。
3.使用与日期函数相关的其他函数:-日期函数还可以与其他函数一起使用来处理和获取更复杂的日期信息。
- 例如,可以将day(、month(和year(函数与聚合函数(如SUM、COUNT等)一起使用,以计算段时间内的总天数、月份数或年份数。
下面是一些使用day(、month(、year(函数的示例:1.获取当前日期的天数、月份和年份:- SELECT day(current_date);- SELECT month(current_date);- SELECT year(current_date);2.获取一些日期的天数、月份和年份:- SELECT day('2024-09-01');- SELECT month('2024-09-01');- SELECT year('2024-09-01');3.对日期字段进行筛选:- SELECT * FROM table WHERE day(date_column) = 1;- SELECT * FROM table WHERE month(date_column) = 9;- SELECT * FROM table WHERE year(date_column) = 2024;4.计算两个日期之间的天数差:- SELECT datediff(date1, date2);- 示例:SELECT datediff('2024-09-10', '2024-09-01'); 返回结果为95.获取当前日期的加减操作:- SELECT current_date + interval 1 day; (当前日期加1天)- SELECT current_date - interval 1 month; (当前日期减去1个月)- SELECT current_date + interval 1 year; (当前日期加1年)以上示例仅演示了day(、month(、year(函数的基本用法,并且可能因不同的数据库而有所差异。
Oracle 中SQL函数简介
返回大于或等于x的最小整数值
Ceil(18.1),返回结果为:19
Cos(x)
返回x的余弦
Cos(0),返回结果为:1
Cosh(x)
返回x的双曲余弦值
Cosh(0),返回结果为:1
Exp(x)
返回e的x次幂
Exp(1),返回结果为:2.71828
Floor(x)
返回小于或等于x的最大整数值
打开游标
Open游标名称;
Open c_classes;
从游标提取
Fetch游标名称into变量列表;
Fetch c_classes into v_classRecord;
关闭游标
Close游标名称;
Close c_classes;
存储过程
Create [or replace] procedure过程名称[(参数1[{in|out|in out}]参数类型,
Round(d[,format])
将日期按照由format指定的格式进行舍入
Round(to_date(‘03-3-16’,’YY-MM-DD’),’MM’),返回结果为:以16日为限,小于16,返回3月第一天,否则返回2003年4月的第一天,即2003年4月1日。
Trunc(d[,format])
Round(x[,y])
返回舍入到小数点右边y位的x值
Round(1.56,1),返回结果为:1.6
Sign(x)
如果x<0,返回-1,x=0,返回0,x>0,返回1
Sign(-23.4),返回结果为:-1
Sin(x)
返回x的正弦
Sin(3.14159/3),返回0.866
Sinh(x)
Oracle常用函数
Oracle常用函数sysdate为系统日期 dual为虚表一)日期函数[重点掌握前四个日期函数]1,add_months[返回日期加(减)指定月份后(前)的日期]select sysdate S1,add_months(sysdate,10) S2,add_months(sysdate,5) S3 from dual;2,last_day [返回该月最后一天的日期]select last_day(sysdate) from dual;3,months_between[返回日期之间的月份数]select sysdate S1, months_between('1-4月-04',sysdate) S2,months_between('1-4月-04','1-2月-04') S3 from dual4,next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日select sysdate S1,next_day(sysdate,1) S2,next_day(sysdate,'星期日') S3 FROM DUAL5,round[舍入到最接近的日期](day:舍入到最接近的星期日)select sysdate S1,round(sysdate) S2 ,round(sysdate,'year') YEAR,round(sysdate,'month') MONTH ,round(sysdate,'day') DAY from dual6,trunc[截断到最接近的日期]select sysdate S1,trunc(sysdate) S2,trunc(sysdate,'year') YEAR,trunc(sysdate,'month') MONTH ,trunc(sysdate,'day') DAY from dual7,返回日期列表中最晚日期select greatest('01-1月-04','04-1月-04','10-2月-04') from dual二)字符函数(可用于字面字符或数据库列)1,字符串截取select substr('abcdef',1,3) from dual2,查找子串位置select instr('abcfdgfdhd','fd') from dual3,字符串连接select 'HELLO'||'hello world' from dual;4, 1)去掉字符串中的空格select ltrim(' abc') s1,rtrim('zhang ') s2,trim(' zhang ') s3 from dual2)去掉前导和后缀select trim(leading 9 from 9998767999) s1,trim(trailing 9 from 9998767999) s2,trim(9 from 9998767999) s3 from dual;5,返回字符串首字母的Ascii值select ascii('a') from dual6,返回ascii值对应的字母select chr(97) from dual7,计算字符串长度select length('abcdef') from dual8,initcap(首字母变大写) ,lower(变小写),upper(变大写)select lower('ABC') s1,upper('def') s2,initcap('efg') s3 from dual;9,Replaceselect replace('abc','b','xy') from dual;10,translateselect translate('abc','b','xx') from dual; -- x是1位11,lpad [左添充] rpad [右填充](用于控制输出格式)select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual; select lpad(dname,14,'=') from dept;12, decode[实现if ..then 逻辑]select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept; 三)数字函数1,取整函数(ceil 向上取整,floor 向下取整)select ceil(66.6) N1,floor(66.6) N2 from dual;2, 取幂(power) 和求平方根(sqrt)select power(3,2) N1,sqrt(9) N2 from dual;3,求余select mod(9,5) from dual;4,返回固定小数位数 (round:四舍五入,trunc:直接截断)select round(66.667,2) N1,trunc(66.667,2) N2 from dual;5,返回值的符号(正数返回为1,负数为-1)select sign(-32),sign(293) from dual;四)转换函数1,to_char()[将日期和数字类型转换成字符类型]1) select to_char(sysdate) s1,to_char(sysdate,'yyyy-mm-dd') s2,to_char(sysdate,'yyyy') s3,to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,to_char(sysdate, 'hh24:mi:ss') s5,to_char(sysdate,'DAY') s6 from dual;2) select sal,to_char(sal,'$99999') n1,to_char(sal,'$99,999') n2 from emp2, to_date()[将字符类型转换为日期类型]insert into emp(empno,hiredate)values(8000,to_date('2004-10-10','yyyy-mm-dd'));3, to_number() 转换为数字类型select to_number(to_char(sysdate,'hh12')) from dual; //以数字显示的小时数五)其他函数user:返回登录的用户名称select user from dual;vsize:返回表达式所需的字节数select vsize('HELLO') from dual;nvl(ex1,ex2):ex1值为空则返回ex2,否则返回该值本身ex1(常用)例:如果雇员没有佣金,将显示0,否则显示佣金select comm,nvl(comm,0) from emp;nullif(ex1,ex2):值相等返空,否则返回第一个值例:如果工资和佣金相等,则显示空,否则显示工资select nullif(sal,comm),sal,comm from emp;coalesce:返回列表中第一个非空表达式select comm,sal,coalesce(comm,sal,sal*10) from emp;nvl2(ex1,ex2,ex3) :如果ex1不为空,显示ex2,否则显示ex3如:查看有佣金的雇员姓名以及他们的佣金select nvl2(comm,ename,') as HaveCommName,comm from emp;六)分组函数max min avg count sum1,整个结果集是一个组1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和select max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp where deptno=30;2, 带group by 和 having 的分组1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno;2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno having deptno=30;3, stddev 返回一组值的标准偏差select deptno,stddev(sal) from emp group by deptno;variance 返回一组值的方差差select deptno,variance(sal) from emp group by deptno;4, 带有rollup和cube操作符的Group Byrollup 按分组的第一个列进行统计和最后的小计cube 按分组的所有列的进行统计和最后的小计select deptno,job ,sum(sal) from emp group by deptno,job;select deptno,job ,sum(sal) from emp group by rollup(deptno,job); cube 产生组内所有列的统计和最后的小计select deptno,job ,sum(sal) from emp group by cube(deptno,job);。
oracle时间函数(求每月第一天,最后一天等)
一、Oracle的日期函数:Oracle从8i开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、截取等功能。
下面是Oracle提供的日期函数一览表 FunctionUseADD_MONTHSAdds months to a dateLAST_DAYComputes the last day of the monthMONTHS_BETWEENDetermines the number of months between two datesNEW_TIMETranslates a time to a new time zoneNEXT_DAYReturns the date of the next specified weekdayROUNDRounds a date/time value to a specified elementSYSDATEReturns the current date and timeTO_CHARConverts dates to stringsTO_DATEConverts strings and numbers to datesTRUNCTruncates a date/time value to a specific element二、日期加减:在Oralce中,对日期进行加减操作的默认单位是天,也就是说如果我们向当前日期加1的话是加上一天,而不是一秒或一小时。
那么对一天中的一段时间进行加减要怎么做呢?很简单!只需将它们转化为以天为单位即可。
【1】为当前时间加上30分钟: SQL> select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') now_date, to_char(sysdate+(30/24/60), 'yyyy-mm-dd hh:mi:ss') new_date from dual;NOW_DATE NEW_DATE-------------------------------------- -------------------------------------- 2008-06-30 10:47:31 2008-06-30 11:17:31SQL>我们看到了在绿色高亮处使用30/24/60将分钟转换成天。
oracle sql数据类型函数
oracle sql数据类型函数一、Oracle SQL数据类型简介Oracle SQL支持多种数据类型,包括数值类型、字符串类型、日期和时间类型、布尔类型等。
了解这些数据类型有助于更好地利用Oracle SQL进行数据处理。
1.数值类型:包括整数类型(如INTEGER、SMALLINT、TINYINT)、浮点数类型(如FLOAT、DOUBLE PRECISION、NUMERIC)、decimal和char 类型等。
2.字符串类型:包括VARCHAR2、CHAR、NCHAR等。
3.日期和时间类型:包括DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、INTERVAL等。
4.布尔类型:BOOLEAN。
二、Oracle SQL常用函数概述Oracle SQL提供了丰富的函数,可以方便地进行数据处理和分析。
以下为一些常用函数类别:1.数据类型转换与处理函数:如CAST、CONVERT、TRUNC等。
2.字符串处理函数:如LENGTH、SUBSTR、INSTR、LIKE等。
3.数学与逻辑运算函数:如SUM、AVG、MIN、MAX、MOD、LOG、POWER等。
4.日期和时间函数:如SYSDATE、TO_DATE、DATE_ADD、DATE_SUB 等。
5.聚合与分组函数:如GROUP BY、HAVING、SELECT DISTINCT等。
三、实战案例与应用以下为一个简单的实战案例,演示如何使用Oracle SQL数据类型和函数进行数据处理:假设我们有一个员工表(EMPLOYEE),包含以下字段:ID(整数类型)、NAME(字符串类型)、AGE(整数类型)、DEPARTMENT(字符串类型)、SALARY(浮点数类型)、HIRE_DATE(日期类型)、LEAVE_DATE(日期类型)。
1.查询所有员工的详细信息:```SELECT * FROM EMPLOYEE;```2.查询年龄大于30岁的员工名单:```SELECT NAME FROM EMPLOYEE WHERE AGE > 30;```3.计算所有员工的薪资总额:```SELECT SUM(SALARY) FROM EMPLOYEE;```4.查询各部门的平均年龄:```SELECT DEPARTMENT, AVG(AGE) FROM EMPLOYEE GROUP BY DEPARTMENT;```5.统计员工离职人数:```SELECT COUNT(*) FROM EMPLOYEE WHERE LEAVE_DATE IS NOT NULL;```通过以上案例,我们可以看到Oracle SQL数据类型和函数在实际应用中的重要作用。
ORACLE时间函数(SYSDATE)深入理解
ORACLE时间函数(SYSDATE)深⼊理解select sysdate,add_months(sysdate,12) from dual; --加1年select sysdate,add_months(sysdate,1) from dual; --加1⽉select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1⼩时select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒select sysdate,add_months(sysdate,-12) from dual; --减1年select sysdate,add_months(sysdate,-1) from dual; --减1⽉select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1⼩时select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒ORACLE时间函数(SYSDATE)简析1:取得当前⽇期是本⽉的第⼏周SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual;TO_CHAR(SYSDATE,'YY-------------------20030327 4 18:16:09SQL> select to_char(sysdate,'W') from dual;T-42:取得当前⽇期是⼀个星期中的第⼏天,注意星期⽇是第⼀天SQL> select sysdate,to_char(sysdate,'D') from dual;SYSDATE T--------- -27-MAR-03 5 类似: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 该⽉中第⼏个星期D 周中的星期⼏hh ⼩时(12)hh24 ⼩时(24)Mi 分ss 秒3:取当前⽇期是星期⼏中⽂显⽰:SQL> select to_char(sysdate,'day') from dual;TO_CHAR(SYSDATE,'DAY')----------------------4:如果⼀个表在⼀个date类型的字段上⾯建⽴了索引,如何使⽤alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'5: 得到当前的⽇期select sysdate from dual;6: 得到当天凌晨0点0分0秒的⽇期select trunc(sysdate) from dual;-- 得到这天的最后⼀秒select trunc(sysdate) + 0.99999 from dual;-- 得到⼩时的具体数值select trunc(sysdate) + 1/24 from dual;select trunc(sysdate) + 7/24 from dual;7.得到明天凌晨0点0分0秒的⽇期select trunc(sysdate+1) from dual;select trunc(sysdate)+1 from dual;8: 本⽉⼀⽇的⽇期select trunc(sysdate,'mm') from dual;9:得到下⽉⼀⽇的⽇期select trunc(add_months(sysdate,1),'mm') from dual;10:返回当前⽉的最后⼀天?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;11: 得到⼀年的每⼀天select trunc(sysdate,'yyyy')+ rn -1 date0from(select rownum rn from all_objectswhere rownum<366);12:今天是今年的第N天SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;13:如何在给现有的⽇期加上2年select add_months(sysdate,24) from dual;14:判断某⼀⽇⼦所在年分是否为润年select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;15:判断两年后是否为润年select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual; 16:得到⽇期的季度select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;select to_char(sysdate, 'Q') from dual;。
- 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,即为查找当前月份的前三个月中的每周五的日期。