Oracel_常用日期型函数
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常用日期函数months

oracle常用日期函数months
oracle常用日期函数 months_between add_months next_day to_date() to_Number to_char
2008-04-07 15:06:08| 分类: Oracle |字号订阅
【训练3】假定当前的系统日期是2003年2月6日,求再过1000天的日期。
输入并执行查询:
SELECT sysdate+1000 AS "NEW DATE" FROM dual;
返回结果为:
NEW DATE
----------------
04-11月-05
说明:该查询使用到了日期的加法运算,求经过一定天数后的新日期。
// 直接用+来做天数加法
【训练4】假定当前的系统日期是2003年2月6日,显示部门10雇员的雇佣天数。
输入并执行查询:
SELECT ename, round(sysdate-hiredate) DAYS
FROM emp
WHERE deptno = 10;
返回结果为:
ENAME DAYS
--------------- ---------------------
CLARK 7913
KING 7752
MILLER 7685
说明:该查询使用日期的减法运算求两个日期的相差天数。
用round函数对天数进行四舍五入。
// 减法。
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中时间和⽇期函数总结查看当前⽇期格式: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;——获取内部表⽰的字节数。
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数据类型详解---日期型(转载)

oracle数据类型详解---⽇期型(转载)oracle 数据类型详解---⽇期型oracle数据类型看起来⾮常简单,但⽤起来会发现有许多知识点,本⽂是我对ORACLE⽇期数据类型的⼀些整理,都是开发⼊门资料,与⼤家分享:注:由于INTERVAL及TIME ZONE实际⽤得⽐较少,所以本⽂内容未涉及这两个⽅⾯。
1、常⽤⽇期型数据类型1.1、DATE这是ORACLE最常⽤的⽇期类型,它可以保存⽇期和时间,常⽤⽇期处理都可以采⽤这种类型。
DATE表⽰的⽇期范围可以是公元前4712年1⽉1⽇⾄公元9999年12⽉31⽇date类型在数据库中的存储固定为7个字节,格式为:第1字节:世纪+100第2字节:年第3字节:⽉第4字节:天第5字节:⼩时+1第6字节:分+1第7字节:秒+11.2、TIMESTAMP(p)这也是ORACLE常⽤的⽇期类型,它与date的区别是不仅可以保存⽇期和时间,还能保存⼩数秒,⼩数位数可以指定为0-9,默认为6位,所以最⾼精度可以到ns(纳秒),数据库内部⽤7或者11个字节存储,如果精度为0,则⽤7字节存储,与date类型功能相同,如果精度⼤于0则⽤11字节存储。
格式为:第1字节:世纪+100第2字节:年第3字节:⽉第4字节:天第5字节:⼩时+1第6字节:分+1第7字节:秒+1第8-11字节:纳秒,采⽤4个字节存储,内部运算类型为整形注:TIMESTAMP⽇期类型如果与数值进⾏加减运算会⾃动转换为DATE型,也就是说⼩数秒会⾃动去除。
1.3、DATE与TIMESTAMP类型内部存储验证1create table T2 (3 C1 DATE,4 C2 TIMESTAMP(9)5 );67insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211');8insert into t(c1,c2) values(9 to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),10 to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')11 );1213 SQL>select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;C1 C1_D C2 C2_D------------------------ ---------------------------------------- ---------------------------------------- -----------------------------------------------------2010-2-12 Typ=12 Len=7: 120,110,2,12,1,1,1 12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11:120,110,2,12,14,25,53,13,244,111,2032010-2-12 上午 10:20:30 Typ=12 Len=7: 120,110,2,12,11,21,31 12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11:120,110,2,12,14,25,53,7,91,202,0以下是为了测试是为了验证TIMESTAMP的⼩数位存储算法:1 SQL>select c2,dump(c2,16) c2_d16 from t;C2 C2_D16---------------------------------------- --------------------------------------------------------------------------------12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,d,f4,6f,cb12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,7,5b,ca,0SQL>select to_number('0df46fcb','xxxxxxxx') mydata1,to_number('075bca00','xxxxxxxx') mydata2 from dual;MYDATA1 MYDATA2---------- ----------234123211 1234560002、常见问题2.1、如何取当前时间sysdate--返回当前系统⽇期和时间,精确到秒systimestamp--返回当前系统⽇期和时间,精确到毫秒2.2、如何进⾏⽇期运算⽇期型数据可以与数值加减得到新的⽇期,加减数值单位为天sysdate+1--取明天的当前时间sysdate-1/24--取当前时间的前⼀个⼩时SQL>select sysdate d1,sysdate+1 d2,sysdate-1/24 d3 from dual;D1 D2 D3------------------------ ------------------------ ------------------------2010-5-13 下午 10:55:16 2010-5-14 下午 10:55:16 2010-5-13 下午 09:55:162.3、如何求两个⽇期的间隔时间可以直接把两个⽇期相减,返回的单位为天,⼩时及分秒会换算成⼩数SQL>select date'2012-01-01'-sysdate from dual;DATE'2012-01-01'-SYSDATE------------------------597.0460300925932.4、如何将⽇期转字符to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')2.5、如何将字符转⽇期to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')to_timestamp('1999-12-01 11:00:00.123456','YYYY-MM-DD HH:MI:SS.FF6')3、常⽤⽇期函数3.1、TO_CHAR(DATE,FORMATSTR)--格式化⽇期成字符SQL>select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') d1 from dual;D1------------------------2010-05-13 22:56:38TO_CHAR的其它⽤法⽰例1 SQL>SELECT TO_CHAR(date '2010-02-12', 'D') week_dayth,--周第⼏天(1-7),星期天=1,星期⼀=2,星期⼆=3,星期三=4,星期四=5,星期五=6,星期六=72 TO_CHAR(date '2010-02-12', 'DD') month_dayth,--⽉第⼏天3 TO_CHAR(date '2010-02-12', 'DDD') year_dayth,--年第⼏天4 TO_CHAR(date '2010-02-12', 'DAY') weekdayname,--英⽂星期名5 _CHAR(date '2010-02-12', 'w') month_weekth,--⽉第⼏周(0-4)6 TO_CHAR(date '2010-02-12', 'ww') year_weekth--年第⼏周(0-53)7FROM DUAL;WEEK_DAYTH MONTH_DAYTH YEAR_DAYTH WEEKDAYNAME MONTH_WEEKTH YEAR_WEEKTH---------- ----------- ---------- ----------- ------------ -----------6 12 043 FRIDAY 2 073.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成⽇期to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')格式备注:HH表⽰12⼩时进制,HH24表⽰采⽤24⼩时进制,MM表⽰⽉份,MI表⽰分钟。
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')文章来源:网络编辑:联动北方技术论坛(如有侵权请及时联络以便删除)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用日期型函数1。
Sysdate 当前日期和时间SQL> Select sysdate from dual;SYSDA TE----------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'))from dual;MONTHS_BETWEEN(SYSDA TE,TO_DA TE('2005-11-12','YYYY-MM-DD'))-----------------------------------------------------------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)) " Y ears" from dual;Y ears----------200810。
localtimestamp()返回会话中的日期和时间SQL> select localtimestamp from dual;LOCALTIMESTAMP---------------------------------------------------------------------------21-6月-05 10.18.15.855652 上午常用日期数据格式(该段为摘抄)Y或YY或YYY年的最后一位,两位或三位Select to_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;SUN 2002年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;FIRSTDA Y----------2005-05-014.按照每周进行统计SQL> select to_char(sysdate,'ww') from dual group by to_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,即为查找当前月份的前三个月中的每周五的日期。