Oracel_常用日期型函数

合集下载

oracle时间函数(求每月第一天等等等)

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
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日期函数和循环总结

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中时间和⽇期函数总结查看当前⽇期格式: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⽇期处理函数+常⽤函数⽰例时间相关应⽤⽰例————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 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数据类型看起来⾮常简单,但⽤起来会发现有许多知识点,本⽂是我对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日期函数中常用的几大函数

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时间函数
dual;
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日期函数和转换函数

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日期时间函数大全

课题_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 当周第几天全写显示值:星期五,若是英文版,显示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;。

oracle 经典日期函数

oracle 经典日期函数
30
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日期计算

oracle日期计算Oracle数据库中提供了很多日期计算的函数和运算符,可以帮助我们完成各种日期计算操作。

下面详细介绍一些常用的日期计算方法。

1.DATE和TIMESTAMP数据类型在Oracle中,DATE数据类型表示日期和时间,精确到秒;而TIMESTAMP数据类型表示日期和时间,精确到纳秒。

我们可以使用这两种数据类型来表示和计算日期。

2.使用SYSDATE函数获取当前日期和时间SYSDATE函数可以获取当前日期和时间。

例如,可以使用SELECTSYSDATEFROMDUAL;语句来查询当前日期和时间。

3.使用TO_DATE函数将字符串转换为日期TO_DATE函数可以将字符串转换为日期。

例如,使用SELECTTO_DATE('2024-01-01','YYYY-MM-DD')FROMDUAL;语句将字符串'2024-01-01'转换为日期。

4.使用ADD_MONTHS函数添加月份ADD_MONTHS函数可以在一个日期上添加指定的月数。

例如,使用SELECTADD_MONTHS(SYSDATE,1)FROMDUAL;语句可以获取当前日期后一个月的日期。

5.使用MONTHS_BETWEEN计算两个日期之间的月份差MONTHS_BETWEEN函数可以计算两个日期之间的月份差。

例如,使用SELECTMONTHS_BETWEEN(TO_DATE('2024-12-01','YYYY-MM-DD'),TO_DATE('2024-01-01','YYYY-MM-DD'))FROMDUAL;语句可以计算出2024年12月1日与2024年1月1日之间的月份差。

6.使用NEXT_DAY函数查找下一个指定的星期日期NEXT_DAY函数可以查找下一个指定的星期日期。

例如,使用SELECTNEXT_DAY(SYSDATE,'FRIDAY')FROMDUAL;语句可以查找下一个星期五的日期。

oracle日期时间函数实例大全 电脑资料

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日期函数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对日期date类型操作的函数

oracle对日期date类型操作的函数

oracle对⽇期date类型操作的函数⽆论是DATE还是timestamp都可以进⾏加减操作加⼀个简单的数来增加天max,min来求其最⼤最⼩⽇期avg,sum就只能先转成数字类型才可⽤使⽤内置函数add_months来增加年和⽉使⽤内置函数numtoyminterval增加年,⽉使⽤内置函数numtodsinterval增加⼩时,分钟和秒umtoyminterval函数——数字转换函数语法:NUMTOYMINTERVAL ( n , 'char_expr' )char_expr:⽇期描述,可以是YEAR和MONTH作⽤:可以将数字转换成相应的⽇期单位时间NUMTOYMINTERVAL ( 1, 'MONTH' ) 表⽰⼀个⽉NUMTOYMINTERVAL ( 1, 'YEAR' ) 表⽰⼀年numtodsinterval函数——数字转换函数语法:NUMTOYMINTERVAL ( n , 'char_expr' )char_expr:⽇期描述,可以是day、hour、minute、second作⽤:可以将数字转换成相应的⽇期单位时间NUMTOYMINTERVAL ( 1, 'day' ) 表⽰⼀天NUMTOYMINTERVAL ( 1, 'hour' ) 表⽰⼀个⼩时通常当我们使⽤add_month添加⽉时,如果输⼊是本⽉⽉底的⽇期,那么得到的也是⽉底的⽇期,⽐如add_months(to_date('2007-02-28','yyyy-mm-dd'),1)得到的就会是'2007-03-31',⽽不是'2007-03-28'。

此时,如果使⽤的是to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(1,'month'),那么得到的就是'2007-03-28'。

oracle中计算两个日期之间得天数、月数、年数以及结合使用常用函数

oracle中计算两个日期之间得天数、月数、年数以及结合使用常用函数

oracle中计算两个⽇期之间得天数、⽉数、年数以及结合使⽤常⽤函数1、相差天数(两个⽇期相减)--Oracle中两个⽇期相差天数--select TO_NUMBER(TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))AS 相差天数 from dual;2、相差⼩时数、分钟数、秒数--Oracle中两个⽇期相差⼩时数--select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24)AS 相差⼩时数 from dual;--Oracle中两个⽇期相差分钟数--select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60)AS 相差分钟数 from dual;--Oracle中两个⽇期相差秒数--select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60*60)AS 相差秒数 from dual;3、相差⽉数(months_between()函数)--oracle两个⽇期的相差⽉数----1)⽉份都是最后⼀天,A⽇期 > B⽇期 ,返回整数 ---select months_between(TO_DATE('2018-6-30','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))As 相差⽉份1 from dual;--2)⽉份都是最后⼀天,B⽇期 > A⽇期 ,返回负数 ---select months_between(TO_DATE('2018-4-30','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))As 相差⽉份2 from dual;--3)⽉份天数不⼀样,A⽇期 > B⽇期 ,返回带⼩数的数字---select months_between(TO_DATE('2018-6-25','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))As 相差⽉份3 from dual;4、相差年数(原先⽉数/12)--oracle两个⽇期的相差年份--select ((months_between(TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2016-5-31','yyyy-mm-dd hh24:mi:ss')))/12)As 相差年份 from dual;显⽰结果如下:1)相差天数2)相差⼩时数、分钟数、毫秒数3)相差⽉数4)相差年数ROUND——按照指定的精度进⾏四舍五⼊SQL> select round(3.1415926,4) from dual;ROUND(3.1415926,4)------------------3.1416TRUNC——按照指定的精度进⾏截取⼀个数SQL> select trunc(3.1415926,4) from dual; ROUND(3.1415926,4)------------------3.1415FLOOR——对给定的数字取整数位SQL> select floor(2345.67) from dual; FLOOR(2345.67)--------------2345CEIL-- 返回⼤于或等于给出数字的最⼩整数SQL> select ceil(3.1415927) from dual; CEIL(3.1415927)。

Oracle常用日期函数

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 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类型数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,即为查找当前月份的前三个月中的每周五的日期。

相关文档
最新文档