ORACLE日期时间函数大全
oracle 中时间用法
oracle 中时间用法在Oracle数据库中,时间的处理和使用是非常重要的。
Oracle提供了许多用于处理时间的函数和数据类型,以下是一些常见的时间用法:1. 数据类型:DATE,Oracle中用于存储日期和时间的数据类型。
它包含年、月、日、时、分和秒的信息。
TIMESTAMP,比DATE类型精确度更高的日期和时间数据类型,可以精确到纳秒级别。
2. 获取当前时间:使用SYSDATE函数可以获取当前的日期和时间。
使用CURRENT_TIMESTAMP函数可以获取当前的时间戳。
3. 日期和时间函数:TO_DATE,将字符串转换为日期类型。
TO_CHAR,将日期类型格式化为字符串。
EXTRACT,从日期中提取特定的部分,比如年、月、日、小时等。
ADD_MONTHS,在日期上加上指定的月数。
MONTHS_BETWEEN,计算两个日期之间相差的月数。
4. 日期和时间运算:可以使用+和-运算符在日期上进行加减操作。
可以对日期进行比较,判断日期的先后顺序。
5. 时区转换:使用AT TIME ZONE可以将日期和时间从一个时区转换到另一个时区。
使用FROM_TZ和CAST函数可以进行时区转换。
6. 时间戳:可以使用TO_TIMESTAMP将字符串转换为时间戳类型。
可以使用FROM_TZ函数将带有时区信息的日期转换为时间戳类型。
7. 时区信息:Oracle数据库中存储了时区信息,可以通过查询相关的数据字典视图来获取时区信息。
总的来说,Oracle提供了丰富的日期和时间处理功能,可以满足各种复杂的时间需求。
通过合理使用日期和时间函数,可以方便地进行日期和时间的计算、转换和格式化。
同时,时区的处理也是Oracle日期和时间处理中需要特别注意的部分,确保在多时区环境下能够正确处理日期和时间数据。
Oracle日期函数和循环总结
Oracle⽇期函数和循环总结⼀,⽇期相关的函数Select to_char(sysdate,'Q') from dual;--指定⽇期的季度Select to_char(sysdate,'MM') from dual;--⽉份Select to_char(sysdate,'WW') from dual;--当年第⼏周Select to_char(sysdate,'W') from dual ;--本⽉第⼏周Select to_char(sysdate,'DD') from dual;--当⽉第⼏天Select to_char(sysdate,'D') from dual;--周内第⼏天Select to_char(sysdate,'DY') from duaL;--星期⼏Select last_day(sysdate) from dual;--本⽉最后⼀天Select add_months(sysdate,2) from dual;--当前⽇期d后推n个⽉select months_between(sysdate,to_date('2012-11-12','yyyy-mm-dd'))from dual;--⽇期f和s间相差⽉数SELECT (next_day(sysdate,1)+1) FROM dual;--指定的⽇期之后的第⼀个⼯作⽇的⽇期select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;--上⽉末天select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;--上⽉今天select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;--上⽉第⼀天select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');--按照每周进⾏统计select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');--按照每⽉进⾏统计select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');--按照每季度进⾏统计⼆,循环编写循环控制结构时,⽤户可以使⽤基本循环,WHILE循环和FOR循环等三种类型的循环语句,下⾯分别介绍使⽤这三种循环语句的⽅法。
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月,若是英文版,显示novmonth 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. 两个日期间的天数ceil(n) 取大于等于数值n的最小整数floor(n)取小于等于数值n的最大整数SELECT floor(TO_DATE('2008-05-02 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -TO_DATE('2008-04-30 23:59:59', 'yyyy-mm-dd hh24-mi-ss')) 相差天数FROM DUAL;相差天数1SELECT ceil(TO_DATE('2008-05-02 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -TO_DATE('2008-04-30 23:59:59', 'yyyy-mm-dd hh24-mi-ss')) 相差天数FROM DUAL;相差天数---------25. 时间为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点之前是不包含在这个范围之内的。
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日期函数中常用的几大函数
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')文章来源:网络编辑:联动北方技术论坛(如有侵权请及时联络以便删除)。
Oracle日期函数大全(各函数锦集)
Oracle日期函数大全(各函数锦集)一、常用日期数据格式1.Y或YY或YYY 年的最后一位,两位或三位SQL> Select to_char(sysdate,'Y') from dual; TO_CHAR(SYSDATE,'Y')--------------------7SQL> Select to_char(sysdate,'YY') from dual; TO_CHAR(SYSDATE,'YY')---------------------07SQL> Select to_char(sysdate,'YYY') from dual; TO_CHAR(SYSDATE,'YYY')----------------------0072.Q 季度1~3月为第一季度,2表示第二季度。
SQL> Select to_char(sysdate,'Q') from dual; TO_CHAR(SYSDATE,'Q')--------------------23.MM 月份数SQL> Select to_char(sysdate,'MM') from dual; TO_CHAR(SYSDATE,'MM')---------------------054.RM 月份的罗马表示(V在罗马数字中表示5)SQL> Select to_char(sysdate,'RM') from dual; TO_CHAR(SYSDATE,'RM')---------------------5.Month 用9个字符长度表示的月份名SQL> Select to_char(sysdate,'Month') from dual;TO_CHAR(SYSDATE,'MONTH')------------------------5月6.WW 当年第几周(2007年5月29日为2007年第22周)SQL> Select to_char(sysdate,'WW') from dual;TO_CHAR(SYSDATE,'WW')---------------------227.W 本月第几周(2007年5月29日为5月第5周)SQL> Select to_char(sysdate,'W') from dual;TO_CHAR(SYSDATE,'W')--------------------58.DDD 当年第几天(2007年5月29日为2007年第149天)SQL> Select to_char(sysdate,'DDD') from dual;TO_CHAR(SYSDATE,'DDD')----------------------1499. DD 当月第几天SQL> Select to_char(sysdate,'DD') from dual;TO_CHAR(SYSDATE,'DD')---------------------2910.D 周内第几天SQL> Select to_char(sysdate,'D') from dual;TO_CHAR(SYSDATE,'D')--------------------11.DY 中文的星期几((2007年5月29日为星期二))SQL> Select to_char(sysdate,'DY') from dual;TO_CHAR(SYSDATE,'DY')---------------------星期二12.HH或HH12 12进制小时数(16:09分为用12小时制计时为4点)SQL> Select to_char(sysdate,'HH') from dual;TO_CHAR(SYSDATE,'HH')---------------------0413.HH24 24小时制SQL> Select to_char(sysdate,'HH24') from dual;TO_CHAR(SYSDATE,'HH24')-----------------------16二、常用时间函数1.trunc(sysdate,'Q') 本季度第一天SQL> select trunc(sysdate,'Q') from dual;TRUNC(SYSDATE,'Q')------------------2007-4-12.trunc(sysdate,'D') 本周的第一天(周日)SQL> select trunc(sysdate,'D')from dual;TRUNC(SYSDATE,'D')------------------2007-5-27/doc/d112362228.html,st_day(sysdate) 本月最后一天SQL> select last_day(sysdate) from dual;LAST_DAY(SYSDATE)-----------------2007-5-31 15:20:34.add_months(sysdate,2) 日期sysdate后推2个月SQL> select add_months(sysdate,2) from dual;ADD_MONTHS(SYSDATE,2)---------------------2007-7-29 15:21:145.next_day(sysdate,2) 日期sysdate之后的第一周中,第2(指定星期的第几天)是什么日期SQL> select next_day(sysdate,2) from dual;NEXT_DAY(SYSDATE,2)-------------------2007-6-4 15:22:106.Months_between(f,s) 日期f和s间相差月数SQL> selectmonths_between(sysdate,to_date('2007-04-12','yyyy-mm-dd'))from dual; MONTHS_BETWEEN(SYSDATE,TO_DATE ------------------------------1.569099089008367.得到SYSDATE+5所在的月份SQL> SELECT to_char(SYSDATE+5,'mon','nls_date_language=american') FROM dual;TO_CHAR(SYSDATE+5,'MON','NLS_D------------------------------jun8.current_date()返回当前会话时区中的当前日期。
Oracle日期函数和转换函数
Oracle⽇期函数和转换函数⼀、⽇期函数⽇期函数⽤于处理date类型的数据,两个⽇期相减返回⽇期之间相差的天数。
⽇期不允许做加法运算,⽆意义。
常见代表符号:yyyy 年,mm ⽉,dd ⽇,hh ⼩时,mi 分钟,ss 秒,day 星期默认情况下⽇期格式是dd-mon-yy即12-3⽉-19(1)sysdate: 该函数返回系统时间(2)months_between(m,n)⽇期m和⽇期n相差多少⽉数(3)add_months(d,n)在⽇期d上增加n个⽉数(4)next_day(d, '星期*') 指定⽇期d下⼀个星期*对应的⽇期(5)last_day(d):返回指定⽇期d所在⽉份的最后⼀天(6)extract(month from d)从⽇期d上提取⽉份数(7)round(d,time)⽇期的四舍五⼊(8)trunc(d,time)⽇期的截断以下是⽇期函数的⼀些例⼦及效果图:各种情况例⼦:months_between select months_between('01-9⽉-95','11-1⽉-94') from dual; --19.6774193548387add_months select add_months('11-2⽉-18',6) from dual; --2018/8/11next_day select next_day('11-2⽉-18','星期六') from dual; --2018/2/17last_day select last_day('11-2⽉-18') from dual; --2018/2/28round 四舍五⼊⽉份 25-7⽉-18 select round(to_date('25-7⽉-2018'), 'month') from dual; --2018/8/1round 四舍五⼊年份 25-7⽉-18 select round(to_date('25-7⽉-2018’), 'year') from dual; --2019/1/1trunc 截断⽉份 25-7⽉-18 select trunc(to_date('25-7⽉-2018'), 'month') from dual; --2018/7/1trunc 截断年份 25-7⽉-18 select trunc(to_date('25-7⽉-2018'), 'year') from dual; --2018/1/1trunc 当前⽇期的00点00分00秒 select trunc(sysdate) from dual;sql⽐较⽇期今天之前:select * from table where update < to_date('2012-09-07 00:00:00', 'yyyy-MM-dd HH24:mi:ss');精确时间:select * from table where update = to_date('2012-09-07 00:00:00', 'yyyy-MM-dd HH24:mi:ss');某段时间内:select * from table where update <= to_date('2012-09-07 00:00:00', 'yyyy-MM-dd HH24:mi:ss')and update >= to_date('2010-02-07 00:00:00', 'yyyy-MM-dd HH24:mi:ss')eg:查找已经⼊职8个⽉多的员⼯SQL>select * from empwhere sysdate>=add_months(hiredate,8);eg:显⽰满10年服务年限的员⼯的姓名和受雇⽇期。
oracle 经典日期函数
31
SYSDATE AA
32
---------- ----------
33
21-SEP-07 24-SEP-07
34
35
MONTHS_BETWEEN(d1,d2)36Biblioteka --计算d1与d2相隔的月数
37
38
ex.
39
selecttrunc(MONTHS_BETWEEN(to_date('20071101','yyyymmdd'),
52
to_char(NEW_TIME(sysdate,'EST','GMT'),'YYYY/MM/DD HH24:MI:SS')格林威治
53
fromdual;
54
55
台北格林威治
56
-------------------- -------------------
57
2007/09/21 14:36:53 2007/09/21 19:36:53
oracle经典日期函数
(ADD_MONTHS,LAST_DAY,NEXT_DAY,MONTHS_BETWEEN,NEW_TIME,ROUND,TRUNC)
1
日期运算函数
2
3
ADD_MONTHS(d,n)
4
--时间点d再加上n个月
5
6
ex.
7
selectsysdate, add_months(sysdate,2) aafromdual;
20
---------- ---------
21
21-SEP-07 30-SEP-07
22
23
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是一种常用的数据库管理系统,它提供了丰富的函数和操作符来进行数据查询和分析。
其中,时间比较函数是一类非常重要且常用的函数,用于比较和操作日期和时间的数据。
本文将介绍Oracle中常用的时间比较函数,并讨论它们的用法和功能。
在Oracle中,时间比较函数可以帮助我们处理各种与时间相关的任务,例如计算日期之间的差异、比较两个日期的大小、提取日期的部分信息等。
下面将介绍几个常见的时间比较函数。
1. SYSDATE函数:SYSDATE函数用于获取当前的系统日期和时间。
它返回一个日期类型的值,可以直接在SQL语句中使用。
例如,我们可以使用SYSDATE函数来查询当前时间之前的所有订单:```sqlSELECT * FROM orders WHERE order_date < SYSDATE;```2. TO_CHAR函数:TO_CHAR函数用于将日期类型转换为字符类型。
它可以接受两个参数,第一个参数是日期类型的值,第二个参数是日期格式。
通过指定不同的日期格式,我们可以将日期按照不同的方式显示出来。
例如,我们可以使用TO_CHAR函数将日期格式化为"YYYY-MM-DD"的形式:```sqlSELECT TO_CHAR(order_date, 'YYYY-MM-DD') FROM orders;```3. MONTHS_BETWEEN函数:MONTHS_BETWEEN函数用于计算两个日期之间的月份差。
它接受两个日期类型的参数,并返回一个数字类型的值,表示两个日期之间的月份差异。
例如,我们可以使用MONTHS_BETWEEN函数计算两个日期之间相差的月份数:```sqlSELECT MONTHS_BETWEEN(end_date, start_date) FROM projects; ```4. ADD_MONTHS函数:ADD_MONTHS函数用于在给定日期上添加指定的月份数。
oracle日期时间函数实例大全 电脑资料
oracle日期时间函数实例大全电脑资料一些常用 oracle 的日期时间函数,分享给大家,一、常用日期数据格式1. 获取年的最后一位,两位,三位,四位select to_char(sysdate,'Y') from dual; -- 获取年的最后一位select to_char(sysdate,'YY') from dual; -- 获取年的最后两位select to_char(sysdate,'YYY') from dual; -- 获取年的最后三位select to_char(sysdate,'YYYY') from dual; -- 获取年的最后四位2. 获取当前季度select to_char(sysdate,'Q') from dual; -- 1 ~ 3月为第一季度, 2表示第二季度。
3. 获取月份数select to_char(sysdate,'MM') from dual; -- 五月为054. 获取月份的罗马表示select to_char(sysdate,'RM') from dual; -- 五月为V5. 获取用9个字符长度表示的月份名select to_char(sysdate,'Month') from dual; -- 五月为5月6. 获取当年第几周select to_char(sysdate,'WW') from dual; -- xx年5月20日为xx年第20周7. 获取本月第几周select to_char(sysdate,'W') from dual; -- xx年5月20日为5月第3周8. 获取当年第几天select to_char(sysdate,'DDD') from dual; -- xx年5月20日为xx年第140天9. 获取当月第几天select to_char(sysdate,'DD') from dual; -- xx年5月20日为5月第20天10. 获取一周第几天select to_char(sysdate,'D') from dual; -- xx年5月20日为一周第三天(从周日算起)11. 获取中文的星期select to_char(sysdate,'DY') from dual; -- xx年5月20日为星期二12. 获取12进制小时数select to_char(sysdate,'HH') from dual; -- 22:36分用12小时制计时为10点13. 获取24进制小时数select to_char(sysdate,'HH24') from dual; -- 22:36分用24小时制计时为22点二、常用时间函数1. trunc(d, [ ? ])select sysdate S1, -- 返回当前日期,有时分秒trunc(sysdate) S2, -- 返回当前日期,无时分秒trunc(sysdate, 'year') YEAR, -- 返回当前年的1月1日,无时分秒trunc(sysdate, 'month') MONTH, -- 返回当前月的1日,无时分秒trunc(sysdate, 'day') DAY, -- 返回当前星期的星期天,无时分秒trunc(sysdate, 'Q') QUARTER, -- 返回当前季度的1日,无时分秒trunc(sysdate, 'D') WEEK -- 返回当前星期的星期天,无时分秒2. round(d, [?])舍入到最接近的日期select sysdate S1,round(sysdate) S2,round(sysdate, 'year') YEAR, -- 舍入到最接近的年 xx/1/1round(sysdate, 'month') MONTH, -- 舍入到最接近的月 xx/6/1round(sysdate, 'day') DAY -- 舍入到最接近的星期日 xx/5/183. last_day(d)获取包含d的月最后一天的日期select last_day(sysdate) from dual; -- 获取本月最后一天:xx/5/31 22:46:014. add_months(d, n)日期d往后推n个月select add_months(sysdate,2) from dual; -- 日期往后推2个月: xx/7/20 22:49:365. next_day(d, day)select next_day(sysdate,2) from dual; -- 日期sysdate之后的第一周中,指定星期的第2天是什么日期6. months_between(f,s)日期f和s间相差月数select months_between(sysdate,to_date('xx-04-12','yyyy-mm-dd'))from dual; -- 85.28898745519717. 获取两个日期间的天数select floor(sysdate - to_date('xx0405','yyyymmdd')) from dual;三、综合用法1. 获取上个月最后一天select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') lastDay from dual;2. 获取上个月的今天select to_char(add_months(sysdate,-1),'yyyy-MM-dd')preToday from dual;3. 获取上个月的第一天select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;4. 获取某月中所有周五的具体日期select to_char(b.a, 'YY-MM-DD')from (select trunc(sysdate, 'mm') + rownum - 1 awhere rownum < 32) bwhere to_char(b.a, 'day') = '星期五';5. 查找xx-02-28至xx-02-01间除了星期一和七的天数select count(*)from (select rownum - 1 row_numfrom all_objectswhere rownum <= to_date('xx-02-28', 'yyyy-mm-dd') -to_date('xx-02-01', 'yyyy-mm-dd') + 1)where to_char(to_date('xx-02-01', 'yyyy-mm-dd') + row_num - 1, 'D') not in('1', '7')内容仅供参考。
ORACLE日期函数01 (1)
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月,若是英文版,显示novmonth spelled out 字符集表示显示值:11月,若是英文版,显示novemberDay:dd number 当月第几天显示值:02ddd number 当年第几天显示值:02dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示friday spelled out 当周第几天全写显示值:星期五,若是英文版,显示friday ddspth 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点之前是不包含在这个范围之内的。
Oracle常用日期函数
Oracle常⽤⽇期函数常⽤的时间格式掩码如下:掩码元素含义YYYY 四位数年份(如:2005) yearYY ⼆位数年份(如 05)Q 季度(1-4)MM ⽉份(01-12) monthWW 年的星期数(1-53),其中第⼀星期为年的第⼀天⾄第七天W ⽉的星期数(1-5),其中第⼀星期为⽉的第⼀天⾄第七天DDD 年的⽇(1-366)DD ⽉的⽇(1-31)D 周的⽇(1-7),其中周⽇为1,周六为7 dayHH24 24⼩时制(0-23) hourMI 分钟(0-59) minuteSS 秒(0-59) secondSSSSS ⾃午夜之后的秒(0-86399)两个很不错的函数,可以操作⽇期,也可以操作数值:round(⽇期,'指定的⽇期掩码') 返回⽇期时间的四舍五⼊结果指定的掩码不同则结果结果也不同year 以 7⽉1⽇分界线month 以16号为分界线day 以中午12点为分界线hh 以30分钟为分界线mi 以30秒为分界线trunc(⽇期,'指定的⽇期掩码') 返回截断时间year 本年度的1⽉1⽇month 本⽉的1号例⼦:(注意: day d dd 三者的区别)SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual; ROUND(TO_DATE('2007051616:31:4------------------------------2007-1-1SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual; ROUND(TO_DATE('2007051616:31:4------------------------------2007-6-1SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual; ROUND(TO_DATE('2007051616:31:4------------------------------2007-6-1SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual; ROUND(TO_DATE('2007051616:31:4------------------------------2007-5-20SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual; ROUND(TO_DATE('2007051616:31:4------------------------------2007-5-20SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual; ROUND(TO_DATE('2007051616:31:4------------------------------2007-5-17SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual; TRUNC(TO_DATE('2007051616:31:4------------------------------2007-1-1SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;TRUNC(TO_DATE('2007051616:31:4------------------------------2007-5-1SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;TRUNC(TO_DATE('2007051616:31:4------------------------------2007-5-1SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;TRUNC(TO_DATE('2007051616:31:4------------------------------2007-5-13SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;TRUNC(TO_DATE('2007051616:31:4------------------------------2007-5-13SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;TRUNC(TO_DATE('2007051616:31:4------------------------------2007-5-16⽇期时间函数:add_months(⽇期,number) 指定⽇期推迟number个⽉last_day(⽇期) 指定⽇期当⽉的最后⼀天new_time(⽇期,时区简写) 调整时区next_day(⽇期,number) number表⽰周⼏,星期⽇是1,指定number的⽇期(⼀周内或⼀周后)months_between(⽇期1,⽇期2) ⽇期1和⽇期2之间有⼏个⽉sysdate 系统当期那⽇期和时间练习时的代码:select to_number(to_char(last_day(add_months(to_date('20040406','yyyymmdd'),-1))+1,'yyyymmdd')) from dual; TO_NUMBER(TO_CHAR(LAST_DAY(ADD------------------------------20040401select to_number(to_char(last_day(to_date('20040406','yyyymmdd')),'yyyymmdd')) from dual;TO_NUMBER(TO_CHAR(LAST_DAY(ADD------------------------------20040430create or replace procedure p_hkb_date_insert is/* 过程功能描述:⽇期插⼊表中*/v_days number(10);v_date date;i number(10);beginbegin--取得当⽉天数select to_number(to_char(last_day(sysdate), 'dd'))into v_daysfrom dual;--select sysdate from dual; 当前⽇期--select last_day(sysdate) from dual; ⽉底⽇期--select last_day(add_months(sysdate, -1)) from dual; 上⽉底⽇期-- SELECT to_char(last_day(SYSDATE),'dd') days FROM dual; 当前⽉的天数--select last_day(add_months(sysdate,-1))+1 from dual; 当前⽉第⼀天--select to_number(to_char(sysdate,'yyyymmdd')) from dual;系统当前⽇期转换成如20070910格式: end;i := 1;beginselect last_day(add_months(sysdate, -1)) into v_date from dual;while i <= v_daysloopinsert into hkb_datevalues(v_date + i,to_char(v_date + i, 'yyyymmdd'),to_number(to_char(v_date + i, 'yyyymmdd')));--insert into hkb_date--(float_date)-- values--(to_char(v_date + i, 'yyyymmdd'));-- insert into hkb_date--(number_date)-- values--(to_number(to_char(v_date + i, 'yyyymmdd')));i := i + 1;end loop;end;end p_hkb_date_insert;create table hkb_date_construct as select * from hkb_date where 1=2; 继承表字段create table hkb_date_data as select * from hkb_date; 继承表记录。
oracle timestamp相关函数
一、Oracle数据库中的时间和日期数据类型在Oracle数据库中,时间和日期数据类型分别为DATE和TIMESTAMP。
DATE数据类型包含日期和时间信息,精确到秒;TIMESTAMP数据类型则包含日期和时间信息,精确到纳秒。
二、Oracle中常用的TIMESTAMP相关函数1. TO_TIMESTAMP函数TO_TIMESTAMP函数用于将一个字符串转换为TIMESTAMP数据类型。
它的语法如下:TO_TIMESTAMP (string, format)其中,string是要转换的字符串,format是该字符串的格式模板。
例如:TO_TIMESTAMP('2022-06-30 12:30:45', 'YYYY-MM-DDHH24:MI:SS')2. CURRENT_TIMESTAMP函数CURRENT_TIMESTAMP函数用于返回当前的日期和时间。
它不需要任何参数:SELECT CURRENT_TIMESTAMP FROM dual;3. EXTRACT函数EXTRACT函数用于从TIMESTAMP数据类型中提取指定的日期或时间部分。
它的语法如下:EXTRACT (datetime_field FROM timestamp_expr)其中,datetime_field可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等,timestamp_expr是要提取的TIMESTAMP类型数据。
例如:SELECT EXTRACT(YEAR FROM TIMESTAMP '2022-06-3012:30:45') FROM dual;4. TIMESTAMPADD函数TIMESTAMPADD函数用于对TIMESTAMP类型的日期进行加减操作。
它的语法如下:TIMESTAMPADD(interval, integer_expr, timestamp_expr)其中,interval是要添加或减去的时间单位(如YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等),integer_expr是要添加或减去的数量,timestamp_expr是要进行操作的TIMESTAMP类型数据。
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中时间和⽇期函数总结查看当前⽇期格式:select*from nls_session_parameters where parameter='NLS_DATE_FORMAT';修改⽇期的格式: alter session set nls_date_format ='yyyy-mm-dd';永久设置⽇期格式:改注册表oracle/HOME0 加字符串NLS_DATE_FORMAT 值yyyy-mm-dd;1.dd-mon-yy转换为yyyy-mm-ddselect to_char(to_date('01-5⽉-05','dd-mon-yy'),'yyyy-mm-dd') from dual2.计算2009-05-01与2008-04-30的⽉份差select (extract(year from to_date('2009-05-01 ','yyyy-mm-dd')) - extract(year from to_date('2008-04-30','yyyy-mm-dd'))) *12+extract(month from to_date('2008-05-01','yyyy-mm-dd')) - extract(month from to_date('2008-04-30','yyyy-mm-dd')) months from dual; --extract:⽤于从⽇期时间值中取得所需要的特定数据 year.month.day.hour.minute.secondselect ceil((to_date('2009-05-01','yyyy-mm-dd') - to_date('2008-04-30','yyyy-mm-dd'))/30) from dual;select ceil(months_between(to_date('2009-05-01','yyyy-mm-dd'),to_date('2008-04-30','yyyy-mm-dd'))) from dual;--查看现在距2008-08-08已过去了多少个⽉select ceil(months_between(sysdate,to_date('2008-08-08','yyyy-mm-dd'))) from dual;3.年⽉⽇时分秒计算select to_date('2010-04-27 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual; --字符串转换成⽇期select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; --⽇期转化为字符串select to_char(sysdate,'yyyy') as nowYear from dual; --获取时间的年 'yyyy.yyy.yy.y'分别显⽰不同年的计数位--获取时间的⽉select to_char(sysdate,'mm') from dual; -- 04select to_char(sysdate,'mon') from dual; --中⽂版:4⽉英⽂版: aprselect to_char(sysdate,'month') from dual; --中⽂版:4⽉英⽂版: april--获取时间的⽇select to_char(sysdate,'dd') from dual; --当⽉的第⼏天select to_char(sysdate,'ddd') from dual; --当年的第⼏天select to_char(sysdate,'d') from dual; --当周的第⼏天 select to_char(sysdate,'D') from dual;select to_char(sysdate,'ddspth')from dual; --英⽂显⽰当⽉的第⼏天--获取时间的时select to_char(sysdate,'hh24') from dual; --24⼩时制select to_char(sysdate,'hh') from dual; --12⼩时制--获取时间的分select to_char(sysdate,'mi') from dual;--获取时间的秒select to_char(sysdate,'ss') from dual;4.查看星期⼏select to_char(sysdate,'dy') from dual; --星期⼏中⽂版:星期⼆英⽂版:Tueselect to_char(sysdate,'day') from dual; --星期⼏中⽂版:星期⼆英⽂版:Tuesday--英⽂显⽰星期⼏: to_date('2010-04-27','yyyy-mm-dd') 部分可换成sysdate或其他时间select to_char(to_date('2010-04-27','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; --⼩写select to_char(to_date('2010-04-27','yyyy-mm-dd'),'DAY','NLS_DATE_LANGUAGE = American') from dual; --⼤写select to_char(to_date('2010-04-27','yyyy-mm-dd'),'Day','NLS_DATE_LANGUAGE = American') from dual; --⾸字母⼤写--设置会话⽇期语⾔格式 : alter session set nls_date_language='american';5. next_day函数:计算机当前⽇期的下⼀个星期⼏next_day(sysdate,6)是从当前开始下⼀个星期五(n-1)。
Oracle日期处理函数+常用函数示例
Oracle⽇期处理函数+常⽤函数⽰例时间相关应⽤⽰例————select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;——2019-10-21 14:34:15select to_char(sysdate,'ddd-day-dy-Q-WW-W') from dual;——294-星期⼀-4-42-3(当年第⼏天-星期⼏-星期⼏缩写-第⼏季度-当年第⼏周-当⽉第⼏周)select to_date('2019-10-21 14:34:15','yyyy-mm-dd hh24:mi:ss') from dual;——字符转换为⽇期格式select to_char (sysdate, 'yy-mm-dd-day-dy', 'NLS_DATE_LANGUAGE = American') from dual;——19-10-21-monday -mon (以英⽂显⽰⽇期)select * from nls_session_parameters;——查看系统⽀持的⽇期格式select to_number(sysdate - (sysdate-1))*24*60*60*1000 from dual;——86400000(相差多少天、时、分、秒、毫秒,相应增删乘数即可)select to_date(null) from dual;——如果时间为null,那么null也要转换为时间格式select to_char(add_months(trunc(sysdate),-1),'yyyy-mm') from dual;——2019-09(上个⽉)select last_day(add_months(trunc(sysdate),-1)) from dual;——2019/9/30(当⽉最后⼀天)select to_char(trunc(add_months(trunc(sysdate),-1),'month'),'yyyy-mm-dd HH24:MI:SS') from dual;——2019-09-01 00:00:00(上个⽉第⼀天)select next_day(sysdate,7) from dual;——2019/10/26 15:16:43(从输⼊⽇期得当下个星期天的⽇期,7可以换成其他星期数)select months_between(to_date('2014-3-21','yyyy-mm-dd'), to_date('2014-3-20','yyyy-mm-dd')) months from dual;——0.032258064516129(两个⽉差)select extract(month from sysdate) from dual;——10(截取时间戳的某个字段,语法为extract(year|month|day|hour|minute|second from column_name))select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual;——365(计算当年有多少天)select to_char(last_day(to_date('02','mm')),'yyyy-mm-dd') from dual;——2019-02-28(获取当年2⽉最后⼀天信息,判断是否闰年)时间常⽤函数总结:select SYSDATE from dual;——2019/10/21 16:07:37(获取系统时间)Select last_day(sysdate) from dual;——2019/10/31 16:09:19(获取输⼊date类型的最后⼀天)Select add_months(sysdate,2) from dual;——2019/12/21 16:12:29(左参数⽇期,右参数当前⽉份加减数,获取相差⽉份的⽇期)select months_between(sysdate,to_date('2019-09-12','yyyy-mm-dd'))from dual;——1.31224499701314(⽇期相差的⽉份)SELECT next_day(sysdate,2) FROM dual;——2019/10/28 16:20:17(下周2⽇期)select sessiontimezone,current_date from dual;——+08:00,2019/10/21 16:21:53(返回时区和当前会话时区中的当前⽇期)select extract(month from sysdate) "This Month" from dual;——10(按规则得到时间字段,extract(year|month|day|hour|minute|second from column_name) = value)SELECT TRUNC (SYSDATE, 'DD'),TRUNC (SYSDATE, 'MM'),TRUNC (SYSDATE, 'yyyy'),TRUNC (SYSDATE, 'day'),TRUNC (SYSDATE, 'q') FROM DUAL ;——(截取:当天、本⽉第⼀天、本年第⼀天、本周第⼀天、本季度第⼀天;另外还可以截取时分秒)其他常⽤函数总结:select concat('010-','88888888') from dual;——010-********(连接字符串,oracle的concat函数不能连接超过两个,三个及以上需要嵌套使⽤,或者⽤管道符||进⾏连接)select substr('12345',3,2) from dual——34(截取字符串,下标基1,从3开始截取两个字符);select instr('oracle traning','ra',1,2) from dual;——9(从1开始查找第2个出现的'ra'字符串,返回下标,若找不到则返回0)select initcap('smith hEllo') from dual;——Smith Hello(格式化字符串,使单词⾸字符⼤⼩,其余⼩写)select lpad(rpad('gao',10,'*'),17,'*')from dual;——*******gao*******(在指定字符的左或右拼接指定符号,使总长度达到指定的数字)select replace('he love you','he','I') from dual;——I love you(⽤指定字符替换相应字符)select trim('a' from 'abacda') from dual;——bacd(⽤单字符删除⾸尾第⼀个字符,若匹配则删除)select trim(' abacd ') from dual;——(删除⾸位空格)select ceil(3.1415927) from dual;——4(取整,⼤于⾃⾝)select floor(3.1415927) from dual;——3(取整,不⼩于⾃⾝)select round(55.655, 2) from dual;——55.66(四舍五⼊取整,保留⼩数点右边两位,若是负数则保留⼩数点左边)select trunc (55.655, 2) from dual;——(截取,只舍不⼊)select abs(-100) from dual;——100(获取绝对值)SELECT LENGTH (' ') FROM DUAL;——(返回字符串长度,空则为空)select lower('AaBbCcDd') from dual;——(变⼩写)select upper('AaBbCcDd') from dual;——(变⼤写)select ASCII('s') from dual;——(返回字符的⼗进制ascii码)select xm from table1 where soundex(xm)=soundex('weather');——(查找发⾳类似的字符串)select mod(10,3) from dual;——1(求余数)select power(3,3) from dual;——27(求次⽅)select sign(123),sign(-100),sign(0) from dual;——1,-1,0(检查正负)select sqrt(64),sqrt(10) from dual;——(计算平⽅根)Select ASCIISTR ('中国') from dual;——(转换数据库字符集的ASCII码)Select decode('a','⾦',1,'银',2,0) from dual;——0(⽤a跟后⾯参数进⾏⽐对,如果是⽐对成功就显⽰该值,否则显⽰默认值0)Select nullif('a', 'b') from dual;——a(⽐较两个表达式,相等返回null,否则返回第⼀个结果)Select nvl(null,0) from dual;——0(如果第⼀个参数为空,则返回第⼆个参数)Select nvl2(null,1,0) from dual;——0(不为空则返回第⼆个参数,为空则返回第三个参数)分组统计函数:AVG([DISTINCT|ALL]col)——求平均值COUNT(*|[DISTINCT|ALL] col)——求总数MAX([DISTINCT|ALL]col)——求最⼤值MIN([DISTINCT|ALL]col)——求最⼩值SUM([DISTINCT|ALL]col)——求和获取数据库信息:SELECT SYS_CONTEXT ('USERENV', 'TERMINAL') 客户端名称,SYS_CONTEXT ('USERENV', 'LANGUAGE') 客户端语⾔,SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid,SYS_CONTEXT ('USERENV', 'INSTANCE') instance,SYS_CONTEXT ('USERENV', 'ENTRYID') entryid,SYS_CONTEXT ('USERENV', 'ISDBA') isdba,SYS_CONTEXT ('USERENV', 'NLS_TERRITORY') 地区,SYS_CONTEXT ('USERENV', 'NLS_CURRENCY') 货币,SYS_CONTEXT ('USERENV', 'NLS_CALENDAR') nls_calendar,SYS_CONTEXT ('USERENV', 'NLS_DATE_FORMAT') 时间格式,SYS_CONTEXT ('USERENV', 'NLS_DATE_LANGUAGE') 时间语⾔,SYS_CONTEXT ('USERENV', 'NLS_SORT') nls_sort,SYS_CONTEXT ('USERENV', 'CURRENT_USER') current_user,SYS_CONTEXT ('USERENV', 'CURRENT_USERID') current_userid,SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user,SYS_CONTEXT ('USERENV', 'SESSION_USERID') session_userid,SYS_CONTEXT ('USERENV', 'PROXY_USER') proxy_user,SYS_CONTEXT ('USERENV', 'PROXY_USERID') proxy_userid,SYS_CONTEXT ('USERENV', 'DB_DOMAIN') db_domain,SYS_CONTEXT ('USERENV', 'DB_NAME') 数据库名称,SYS_CONTEXT ('USERENV', 'HOST') 客户端完成名称,SYS_CONTEXT ('USERENV', 'OS_USER') 客户端⽤户,SYS_CONTEXT ('USERENV', 'EXTERNAL_NAME') external_name,SYS_CONTEXT ('USERENV', 'IP_ADDRESS') 客户端IP地址,SYS_CONTEXT ('USERENV', 'NETWORK_PROTOCOL') ⽹络协议,SYS_CONTEXT ('USERENV', 'BG_JOB_ID') bg_job_id,SYS_CONTEXT ('USERENV', 'FG_JOB_ID') fg_job_id,SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE') authentication_type, SYS_CONTEXT ('USERENV', 'AUTHENTICATION_DATA') authentication_data FROM DUAL;select user from dual;——查询当前数据库的登录⽤户名select userenv('language') from dual;——返回当前地区、语⾔和字符集select vsize('中') from dual;——获取内部表⽰的字节数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Day:
dd number 当月第几天 显示值:02
ddd number 当年第几天 显示值:02
5. 时间为null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;
注意要用TO_DATE(null)
6.月份差
11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一条记录的TIME 与最后一行是一样的
可以建立一个函数来处理这个问题
create or replace function sys_date return date is
星期一
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';
begin
return sysdate;
end;
select to_char(sys_date,'hh:mi:ss') from all_objects;
12.获得小时数
extract()找出日期或间隔值的字段值
24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1. 日期和字符转换函数用法(to_date,to_char)
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
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的
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-Two
3.求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24')
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
其它
Q digit 季度 显示值:4
WW digit 当年第几周 显示值:44
W digit 当月第几周 显示值:1
Minute:
mi two digits 60进制 显示值:45
Second:
ss two digits 60进制 显示值:25
Hour:
hh two digits 12小时进制 显示值:01
hh24 two digits 24小时进制 显示值:13
yyyy four digits 四位年 显示值:2007
Month:
mm number 两位月 显示值:11
mon abbreviated 字符集表示 显示值:11月,若是英文版,显示nov
也可以这样
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
4. 两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS
8.
dy abbreviated 当周第几天简写 显示值:星期五,若是英文版,显示fri
day spelled out 当周第几天全写 显示值:星期五,若是英文版,显示friday
ddspth spelled out, ordinal twelfth
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;
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
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 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')
ORACLE日期时间函数大全
TO_DATE格式(以时间:2007-11-02 13:45:25为例)
Year:
yy two digits 两位年 显示值:07
yyy three digits 三位年 显示值:007
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年
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;