oracle处理日期时间

合集下载

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)

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. 两个日期间的天数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年月日时分秒的格式

Oracle年月日时分秒的格式一、概述在数据库系统中,日期和时间的处理是非常重要的一个方面。

Oracle数据库提供了丰富的日期和时间函数,可以满足不同的需求。

其中,日期和时间的格式化是其中的关键操作之一。

在Oracle中,我们可以使用不同的格式来表示年月日时分秒。

本文将详细介绍Oracle中年月日时分秒的格式化方法。

二、日期和时间的数据类型在Oracle数据库中,日期和时间被定义为特殊的数据类型。

主要的数据类型有DATE、TIMESTAMP和TIMESTAMP WITH TIME ZONE等。

这些数据类型可以存储年月日时分秒的信息。

2.1 DATE数据类型DATE数据类型是Oracle中最常用的日期和时间数据类型。

它可以存储从公元前4712年到公元9999年的日期和时间。

DATE数据类型的格式默认为”YYYY-MM-DD HH24:MI:SS”,其中YYYY表示年份,MM表示月份,DD表示日期,HH24表示小时(24小时制),MI表示分钟,SS表示秒钟。

2.2 TIMESTAMP数据类型TIMESTAMP数据类型是Oracle中用于存储日期和时间信息的另一种数据类型。

它可以存储更精确的时间信息,包括毫秒级别的精度。

TIMESTAMP数据类型的格式也是”YYYY-MM-DD HH24:MI:SS.FF”,其中FF表示毫秒。

2.3 TIMESTAMP WITH TIME ZONE数据类型TIMESTAMP WITH TIME ZONE数据类型是一种带有时区信息的日期和时间数据类型。

它可以存储时区偏移量,以便在不同的时区中正确地显示日期和时间。

TIMESTAMP WITH TIME ZONE数据类型的格式与TIMESTAMP数据类型相同。

三、日期和时间的格式化在Oracle数据库中,可以使用不同的函数来格式化日期和时间。

常用的函数有TO_CHAR、TO_DATE和TO_TIMESTAMP等。

3.1 TO_CHAR函数TO_CHAR函数用于将日期和时间数据类型转换为指定的字符串格式。

Oracle中日期时间的操作比较和加减

Oracle中日期时间的操作比较和加减

Oracle中日期时间的操作比较和加减Oracle关于时间/日期的操作日期时间间隔操作当前时间减去分钟的时间select sysdate sysdate interval MINUTE from dual当前时间减去小时的时间select sysdate interval hour from dual当前时间减去天的时间select sysdate interval day from dual当前时间减去月的时间select sysdate sysdate interval month from dual当前时间减去年的时间select sysdate sysdate interval year from dual时间间隔乘以一个数字select sysdate sysdate *interval hour from dual日期到字符操作select sysdate to_char(sysdate yyyy mm dd hh :mi:ss ) from dualselect sysdate to_char(sysdate yyyy mm dd hh:mi:ss ) from dualselect sysdate to_char(sysdate yyyy ddd hh:mi:ss ) from dual select sysdate to_char(sysdate yyyy mm iw d hh:mi:ss ) from dual参考oracle的相关关文档(ORACLE DOC/SERVER /A /SQL_ELEMENTS HTM# )字符到日期操作select to_date( : : yyyy mm dd hh :mi:ss ) from dual具体用法和上面的to_char差不多trunk/ ROUND函数的使用select trunc(sysdate YEAR ) from dualselect trunc(sysdate ) from dualselect to_char(trunc(sysdate YYYY ) YYYY ) from dualoracle有毫秒级的数据类型返回当前时间年月日小时分秒毫秒select to_char(current_timestamp( ) DD MON YYYY HH :MI:SSxFF ) from dual;返回当前时间的秒毫秒可以指定秒后面的精度(最大= )select to_char(current_timestamp( ) MI:SSxFF ) from dual;计算程序运行的时间(ms)declaretype rc is ref cursor;l_rc rc;l_dummy all_objects object_name%type;l_start number default dbms_utility get_time;beginfor I inloopopen l_rc forselect object_name from all_objects ||where object_id = || i;lishixinzhi/Article/program/Oracle/201311/17649。

oracle timestamp 格式

oracle timestamp 格式

oracle timestamp 格式
Oracle Timestamp格式是指Oracle数据库中存储日期和时间的数据类型,表示为特定的格式。

在Oracle中,可以将日期或日期时间存储为不同的数据类型。

其中,Timestamp 数据类型是保存日期和时间指定的精度的最准确的数据类型。

TO_TIMESTAMP('YYYY-MM-DD HH24:MI:SS.FF')
其中,YYYY表示年份,MM表示月份,DD表示日期,HH表示小时,MI表示分钟,SS表示秒数;FF表示小数秒(注意是大写的FF)。

例如:
TO_TIMESTAMP('2021-11-22 13:15:30.123456')
这个时间戳表示2021年11月22日下午1:15:30.123456秒。

这意味着,它的精度比时间格式更高,可以存储小数秒的值。

此外,可以指定时区信息,例如:
在Oracle中,还可以使用一些额外的函数来处理日期和时间戳。

例如:
- SYSDATE: 返回当前系统日期和时间。

- SYSTIMESTAMP: 返回当前系统日期和时间戳。

- ADD_MONTHS: 在日期上添加月数。

- MONTHS_BETWEEN: 计算两个日期之间的月份数。

- ROUND: 对日期或时间进行四舍五入操作。

在Oracle数据库中,使用不同的日期或时间数据类型需要注意数据类型的格式和使用范围。

虽然Oracle Timestamp是一种广泛使用的日期和时间数据类型,但在数据库设计和实现方面需要自行根据业务需要决定选择哪种数据类型。

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从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日期处理全集__日期加减全活儿

1、add_months(d,n) 日期d加n个月SQL> SELECT SYSDA TE AS This_Day,add_months(SYSDATE,1) AS Next_Day FROM dual; THIS_DAY NEXT_DAY-------------- ------------08-9月-10 08-10月-102、last_day(d) 包含d的月份的最后一天的日期SQL> select last_day(sysdate) as last_day from dual;LAST_DAY-----------30-9月-103、new_time(d,a,b) 时区的日期和时间d在b时区的日期和时间SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as china,to_char(new_time(sysdate,'est','GMT'),'YYYY-MM-DD HH24:MI:SS') as GMTfrom dual;CHINA GMT------------------- -------------------2010-09-08 09:51:50 2010-09-08 14:51:504、next_day(d,day) 比日期d晚,由day指定的周几的日期SQL> select sysdate as this_day, next_day(sysdate,7) as next_sat from dual;THIS_DAY NEXT_SAT-------------- --------------08-9月-10 11-9月-10N天前的日期:SQL> select to_date(to_char(sysdate-5, 'yyyy-MM-dd'), 'yyyy-MM-dd') from dual;5、sysdate 当前的系统日期和时间6、greatest(d1,d2,...dn) 给出的日期列表中最后的日期SQL> select sysdate as this_day,greatest(sysdate,sysdate+1,sysdate+2) as max_day from dual; THIS_DAY MAX_DAY-------------- --------------08-9月-10 10-9月-107、least(d1,k2,...dn) 给出的日期列表中最早的日期SQL> select sysdate as this_day,least(sysdate,sysdate+1,sysdate-1) as min_day from dual; THIS_DAY MIN_DAY-------------- --------------08-9月-10 07-9月-108、to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as today from dual;TODAY-------------------2010-09-08 10:37:089、to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式SQL> select to_date('2010-09-08 10:37:08','YYYY-MM-DD HH24:MI:SS') as today from dual; TODAY--------------08-9月-1010、round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as this,round(sysdate) as round_day,to_char(sysdate+1/6,'YYYY-MM-DD HH24:MI:SS') as next_4hour,round(sysdate+1/6) as round_dayfrom dual;THIS ROUND_DAY NEXT_4HOUR ROUND_DAY------------------- -------------- ------------------- --------------2010-09-08 10:52:45 08-9月-10 2010-09-08 14:52:45 09-9月-1011、trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as this,trunc(sysdate) as trunc_day,to_char(sysdate+1/6,'YYYY-MM-DD HH24:MI:SS') as next_4hour,trunc(sysdate+1/6) as trunc_dayfrom dual;THIS TRUNC_DAY NEXT_4HOUR TRUNC_DAY------------------- -------------- ------------------- --------------2010-09-08 10:56:18 08-9月-10 2010-09-08 14:56:18 08-9月-10to_date 字符串类型转为换日期类型字符串中的相应位置上的字符,必须符合时间范围的限制查询Oracle日期格式----------------------------------select * from nls_database_parameters;得到结果如下表: 表中NLS_DATE_FORMAT表示日期格式.PARAMETER V ALUE----------------------------------- -----------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET ZHS16GBKNLS_CALENDAR GREGORIANNLS_DA TE_FORMAT DD-MON-RRNLS_DA TE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZMNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM NLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_NCHAR_CHARACTERSET ZHS16GBKNLS_RDBMS_VERSION 8.1.7.0.0或者查询V$NLS_PARAMETERS表,select * from V$NLS_PARAMETERS;也有类似结果SQL>select to_date('2004-11-12 12-07-32','yyyy-mm-dd hh24-mi-ss') value from dual; V ALUE-------------------2004.11.12 12:07:32SQL>select to_date('20041015') value from dual;V ALUE-------------------2004.10.15 00:00:00SQL>select to_date('20041315') value from dual;ERROR 位于第1 行:ORA-01861: 文字与格式字符串不匹配sysdate 当前日期和时间SQL>select sysdate value from dual;V ALUE-------------------2003.11.23 17:09:01last_day 本月最后一天SQL>select last_day(sysdate) value from dual;V ALUE-------------------2003.11.30 17:08:17add_months(d,n) 日期d后推n个月SQL>select add_months(sysdate,2) value from dual;V ALUE-------------------2005.01.23 17:10:21next_day(d,day) 日期d之后的第一周中,指定的那天(指定星期的第几天)是什么日期SQL>select next_day(sysdate,1) value from dual;V ALUE-------------------2004.11.28 17:38:55[oracle/plsql]oracle日期处理完全版日期处理完全版TO_DA TE格式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') fromdual;monday设置日期语言ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样TO_DA TE ('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中trunc()函数用法处理日期、数字类型数据

trunc()函数用法处理日期、数字类型数据一、日期TRUNC函数为指定元素而截去的日期值。

其具体的语法格式如下:TRUNC(date[,fmt])其中:date 一个日期值fmt 日期格式,该日期将由指定的元素格式所截去。

忽略它则由最近的日期截去如果当日日期是:2011-3-181.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-182.select trunc(sysdate, 'mm') from dual --2011-3-1 返回当月第一天.3.select trunc(sysdate,'yy') from dual --2011-1-1 返回当年第一天4.select trunc(sysdate,'dd') from dual --2011-3-18 返回当前年月日5.select trunc(sysdate,'yyyy') from dual --2011-1-1 返回当年第一天6.select trunc(sysdate,'d') from dual --2011-3-13 (星期天)返回当前星期的第一天7.select trunc(sysdate, 'hh') from dual --2011-3-18 14:00:00 当前时间为14:418.select trunc(sysdate, 'mi') from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确二、数字TRUNC(number,num_digits)Number 需要截尾取整的数字。

Num_digits 用于指定取整精度的数字。

Num_digits 的默认值为0。

TRUNC()函数截取时不进行四舍五入9.select trunc(123.458) from dual --12310.select trunc(123.458,0) from dual --12311.select trunc(123.458,1) from dual --123.412.select trunc(123.458,-1) from dual --12013.select trunc(123.458,-4) from dual --014.select trunc(123.458,4) from dual --123.45815.select trunc(123) from dual --12316.select trunc(123,1) from dual --12317.select trunc(123,-1) from dual --120。

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年服务年限的员⼯的姓名和受雇⽇期。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle时间日期操作sysdate+(5/24/60/60) 在系统时间基础上延迟5秒sysdate+5/24/60 在系统时间基础上延迟5分钟sysdate+5/24 在系统时间基础上延迟5小时sysdate+5 在系统时间基础上延迟5天add_months(sysdate,-5) 在系统时间基础上延迟5月add_months(sysdate,-5*12) 在系统时间基础上延迟5年上月末的日期:select last_day(add_months(sysdate, -1)) from dual;本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual本周星期一的日期:select trunc(sysdate,'day')+1 from dual年初至今的天数:select ceil(sysdate - trunc(sysdate, 'year')) from dual;今天是今年的第几周:select to_char(sysdate,'fmww') from dual今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual本月的天数SELECT to_char(last_day(SYSDATE),'dd') days FROM dual今年的天数select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual下个星期一的日期SELECT Next_day(SYSDATE,'monday') FROM dual============================================--计算工作日方法create table t(s date,e date);alter session set nls_date_format = 'yyyy-mm-dd';insert into t values('2003-03-01','2003-03-03');insert into t values('2003-03-02','2003-03-03');insert into t values('2003-03-07','2003-03-08');insert into t values('2003-03-07','2003-03-09');insert into t values('2003-03-05','2003-03-07');insert into t values('2003-02-01','2003-03-31');-- 这里假定日期都是不带时间的,否则在所有日期前加trunc即可。

select s,e,e-s+1 total_days,trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'0','')) work_daysfrom t;-- drop table t;引此:/showthread.php?s=1635506cd5f48b1bc3adbe4cde96f227&threadid=1040 60&perpage=15&pagenumber=1=============================================================================== =判断当前时间是上午下午还是晚上SELECT CASEWHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'ENDFROM dual;=============================================================================== =Oracle 中的一些处理日期将数字转换为任意时间格式.如秒:需要转换为天/小时SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小时' FROM DUALTO_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- <br /> 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') ,sysdatefrom 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)是从当前开始下一个星期五。

相关文档
最新文档