Oracle 时间函数详解
在oracle中处理日期大全TO_DATE格式Day:dd number 12dy abbreviated friday spelled out fridayddspth spelled out, ordinal twelfthMonth:mm number 03mon abbreviated marmonth spelled out marchYear:yy two digits 98yyyy four digits 199824小时格式下时间范围为:0:00:00 - 23:59:59....12小时格式下时间范围为:1:00:00 - 12:59:59 ....1.日期和字符转换函数用法(to_date,to_char)2.select to_char( to_date(222,'J'),'Jsp') from dual显示Two Hundred Twenty-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点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的7. 日期格式冲突问题输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'alter system set NLS_DATE_LANGUAGE = Americanalter session set NLS_DATE_LANGUAGE = American或者在to_date中写select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,可查看select * from nls_session_parametersselect * from V$NLS_PARAMETERS8.select count(*)from ( select rownum-1 rnumfrom all_objectswhere rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-02-01','yyyy-mm-dd')+1)where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )notin ( '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;1select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;1.0322580645161310. Next_day的用法Next_day(date, day)Monday-Sunday, for format code DAYMon-Sun, for format code DY1-7, for format code D11select to_char(sysdate,'hh:mi:ss') TIME from all_objects注意:第一条记录的TIME 与最后一行是一样的可以建立一个函数来处理这个问题create or replace function sys_date return date isbeginreturn sysdate;end;select to_char(sys_date,'hh:mi:ss') from all_objects;12.获得小时数SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer SQL> select sysdate ,to_char(sysdate,'hh') from dual;SYSDATE TO_CHAR(SYSDATE,'HH')-------------------- ---------------------2003-10-13 19:35:21 07SQL> select sysdate ,to_char(sysdate,'hh24') from dual;SYSDATE TO_CHAR(SYSDATE,'HH24')-------------------- -----------------------2003-10-13 19:35:21 19获取年月日与此类似13.年月日的处理select older_date,newer_date,years,months,abs(trunc(newer_date-add_months( older_date,years*12+months ))) daysfrom ( selecttrunc(months_between( newer_date, older_date )/12) YEARS,mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,newer_date,older_datefrom ( select hiredate older_date,add_months(hiredate,rownum)+rownum newer_datefrom emp ))14.处理月份天数不定的办法select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual16.找出今年的天数select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual闰年的处理方法to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )如果是28就不是闰年17.yyyy与rrrr的区别'YYYY99 TO_C------- ----yyyy 99 0099rrrr 99 1999yyyy 01 0001rrrr 01 200118.不同时区的处理select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate from dual;19.5秒钟一个间隔Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')from dual2002-11-1 9:55:00 35786SSSSS表示5位秒数20.一年的第几天select TO_CHAR(SYSDATE,'DDD'),sysdate from dual310 2002-11-6 10:03:5121.计算小时,分,秒,毫秒selectDays,A,TRUNC(A*24) Hours,TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSecondsfrom(selecttrunc(sysdate) Days,sysdate - trunc(sysdate) Afrom dual)select * from tabnameorder by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');//floor((date2-date1) /365) 作为年floor((date2-date1, 365) /30) 作为月mod(mod(date2-date1, 365), 30)作为日.23.next_day函数next_day(sysdate,6)是从当前开始下一个星期五。
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常用函数汇总Oracle是一种常用的关系型数据库管理系统,它提供了许多方便的函数来处理和操作数据。
以下是一些常用的Oracle函数的汇总:1.字符串函数:-CONCAT:用于连接两个字符串。
-UPPER:将字符串转换为大写。
-LOWER:将字符串转换为小写。
-LENGTH:返回字符串的长度。
-SUBSTR:返回字符串的子串。
2.数值函数:-ABS:返回数字的绝对值。
-ROUND:返回一个四舍五入的数字。
-TRUNC:返回数字的整数部分。
-MOD:返回两个数的余数。
3.日期函数:-SYSDATE:返回当前日期和时间。
-TO_CHAR:将日期转换为特定的格式。
-TO_DATE:将字符串转换为日期。
-ADD_MONTHS:在给定的日期上添加指定的月份。
-MONTHS_BETWEEN:返回两个日期之间的月份数。
4.聚合函数:-SUM:计算指定列的总和。
-AVG:计算指定列的平均值。
-COUNT:计算指定列的行数。
-MAX:返回指定列的最大值。
-MIN:返回指定列的最小值。
5.条件函数:-NVL:用于将空值替换为指定的值。
-NULLIF:如果两个表达式相等,则返回空值;否则返回第一个表达式的值。
-COALESCE:返回第一个非空表达式的值。
-CASE:对满足条件的表达式进行分支处理。
6.集合函数:-UNION:将两个结果集合并成一个结果集。
-INTERSECT:返回两个结果集的交集。
-MINUS:返回第一个结果集中不在第二个结果集中的行。
7.窗口函数:-ROW_NUMBER:为查询结果中的每一行分配一个唯一的行号。
-RANK:根据指定的列对结果进行排序,并为相同值的行分配相同的排名。
-DENSE_RANK:根据指定的列对结果进行排序,并为相同值的行分配连续的排名。
8.系统函数:-USER:返回当前用户的名称。
-CURRENT_TIMESTAMP:返回当前的日期和时间。
-SYSTIMESTAMP:返回当前的日期和时间,包括时区信息。
oracle中tohour()用法
Oracle中to_hour()用法一、概述在O ra cl e数据库中,t o_ho ur()函数是一个非常有用的日期和时间函数。
它可以将给定的日期时间值转换为小时部分,并返回一个数值类型的结果。
本文将详细介绍to_h ou r()函数的用法及示例。
二、语法t o_h ou r()函数的语法如下:T O_H OU R(da te)其中,`da te`参数是一个日期或时间值,可以是日期型、时间型、时间戳型或带有时区的时间戳型。
三、示例说明1.将日期型转换为小时部分假设有一个员工表`e m pl oy ee`,其中包含了员工的入职时间。
我们想要获取所有员工的入职小时数。
可以使用t o_ho ur()函数来实现:S E LE CT TO_H OU R(hir e_d at e)AS hi re_ho u rF R OM em pl oy ee;以上示例中,`h ir e_d at e`是`em pl oy ee`表中的日期型字段,使用t o_h ou r()函数将其转换为小时部分,并将结果命名为`h ir e_h ou r`。
2.将时间型转换为小时部分如果想要将时间型字段转换为小时部分,可以按照以下方式使用t o_h ou r()函数:S E LE CT TO_H OU R(sta r t_ti me)A Ss ta rt_h ou rF R OM sc he du le;以上示例中,`s ta rt_ti me`是`s ch ed ul e`表中的时间型字段,使用t o_h ou r()函数将其转换为小时部分,并将结果命名为`s ta rt_ho ur`。
3.将时间戳型转换为小时部分当需要将时间戳型字段转换为小时部分时,可以使用t o_ho ur()函数的以下语法:S E LE CT TO_H OU R(tim e st am p_co lu mn)AS h ou r_pa rtF R OM ta bl e_na me;以上示例中,`t im es t am p_co lu mn`是表`ta bl e_na me`中的时间戳型字段,使用t o_ho ur()函数将其转换为小时部分,并将结果命名为`h ou r_pa rt`。
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⽇期函数简介Oracle⽇期函数⽤于对Oracle数据库中的⽇期及时间进⾏处理,下⾯就为您详细介绍Oracle⽇期函数的⽤法,希望对您能有所启迪。
(1)SYSDATE和TRUNC两个Oracle⽇期函数取Oracle服务器系统的⽇期和截掉⼩数部分的功能。
观察以下操作:create table test_date (name varchar2(20), p_date date);insert into test_date values(‘name1',sysdate);select * from test_date;select * from test_date where p_date='25-10⽉-05‘;select * from test_date where trunc(p_date)= '25-10⽉-05‘;Oracle系统中⽤SYSDATE取得的不仅包含⽇期⽽且还包含的有时间信息,时间信息实际上就是表⽰儒略⽇数据中的⼩数部分。
(2)ADD_MONTHSOracle⽇期函数返回⼀个具有与所提供⽇期相差⽉份的⽇期,函数中给出了未来或以前的⽉份数。
语法如下:ADD_MONTHS(起始⽇期,增减⽉数)select add_months('26-10⽉-05‘,2) from dual;select add_months('26-10⽉-05‘,-2) from dual;(3)LAST_DAY返回包含给定⽇期的那个⽉的最后⼀天。
语法为:LAST_DAY(⽇期)select last_day('21-2⽉-80‘) from dual;(4)MONTHS_BETWEEN返回两个⽇期间的⽉份。
语法为:MONTHS_BETWEEN(较晚⽇期,较早⽇期)select months_between('12-10⽉-05‘,'12-9⽉-03‘) from dual;以下是⼀些补充资料,虽然有点仄,但参考下吧在oracle中有很多关于⽇期的函数,如:1、add_months()⽤于从⼀个⽇期值增加或减少⼀些⽉份 date_value:=add_months(date_value,number_of_months) 例: SQL> select add_months(sysdate,12) Next Year from dual; Next Year ---------- 13-11⽉-04 SQL> select add_months(sysdate,112) Last Year from dual; Last Year ---------- 13-3⽉ -13 SQL>2、current_date()返回当前会放时区中的当前⽇期 date_value:=current_date SQL> column sessiontimezone for a15 SQL> select sessiontimezone,current_date from dual; SESSIONTIMEZONE CURRENT_DA --------------- ---------- +08:00 13-11⽉-03 SQL> alter session set time_zone=-11:00 2 / 会话已更改。
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时间相减函数Oracle是一个广泛使用的关系型数据库管理系统,它提供了许多强大的函数和操作符来处理日期和时间数据类型。
其中,时间相减函数是一种常用的功能,它可以用于计算两个时间之间的时间间隔。
在Oracle中,时间相减函数主要包括以下几种:DATEDIFF、TIMESTAMPDIFF、INTERVAL和EXTRACT。
下面将逐一介绍它们的用法和功能。
1. DATEDIFF函数DATEDIFF函数用于计算两个日期之间的天数、小时数、分钟数等时间间隔。
其基本语法如下:DATEDIFF(interval, start_date, end_date)其中,interval参数指定要计算的时间间隔单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE等。
start_date和end_date参数分别指定两个日期。
例如,要计算两个日期之间的天数间隔,可以使用以下语句:SELECT DATEDIFF('DAY', '2022-01-01', '2022-01-10') AS days_diff FROM dual;上述语句将返回结果为9,表示2022年1月1日和2022年1月10日之间相差9天。
2. TIMESTAMPDIFF函数TIMESTAMPDIFF函数用于计算两个时间戳之间的时间间隔。
其基本语法如下:TIMESTAMPDIFF(interval, start_timestamp, end_timestamp)其中,interval参数指定要计算的时间间隔单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE等。
start_timestamp和end_timestamp参数分别指定两个时间戳。
例如,要计算两个时间戳之间的小时数间隔,可以使用以下语句:SELECT TIMESTAMPDIFF('HOUR', '2022-01-01 12:00:00', '2022-01-01 18:00:00') AS hours_diff FROM dual;上述语句将返回结果为6,表示2022年1月1日12:00:00和2022年1月1日18:00:00之间相差6小时。
oracle日期、字符函数详解 (1)
关于oracle时间格式to_date函数、to_char函数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 //效果是把222这个位置的数字转化为英文格式,没闹明白原理显示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;mondayselect to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = ''simplified chinese''') from dual; //同时还发现,oracle中引号里面的引号,可以有连续的两个引号来表示,类似于java里的\"星期一设置日期语言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; //如果不用floor函数的话得到的结果是含有小数的,也就是说不是整天,用floor函数去小数位取整5. 时间为null的用法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual;//还有一个select 1, TO_char(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常用函数
句中必须要有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,提供一些特殊字段的查询,例如时间日期、算术运算等功能。
