Oracle中的日期时间存储

上传人:豆浆 文档编号:10090067 上传时间:2017-10-06 格式:DOC 页数:5 大小:132.50KB
返回 下载 相关 举报
Oracle中的日期时间存储_第1页
第1页 / 共5页
Oracle中的日期时间存储_第2页
第2页 / 共5页
Oracle中的日期时间存储_第3页
第3页 / 共5页
Oracle中的日期时间存储_第4页
第4页 / 共5页
Oracle中的日期时间存储_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Oracle中的日期时间存储》由会员分享,可在线阅读,更多相关《Oracle中的日期时间存储(5页珍藏版)》请在金锄头文库上搜索。

1、Oracle 中的日期时间存储:oracle 数据库中存放时间格式的数据,是以 oracle 特定的格式存贮的,占 7 个字节,与查询时显示的时间格式无关。不存贮秒以下的时间单位。Oracle 中的日期时间显示:通常,客户端与数据库建立起连接后,oracle 就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。Oracle 中的日期时间插入:向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。Oracle 中的日期时间格式修改:a.SQL alter session set nls_date_format =

2、 yyyy-mm-dd hh24:mi:ss;b.册表hkey_local_machinesoftwareoraclehome0 主键中增加一个字串(8i 版本) ,字串名为 nls_date_format,字串的值为你希望定义的时间格式前者只对当前会话有效,也即是一旦你关闭了 SQL*PLUS 窗口或重新打开一个 SQL*PLUS 窗口,日期时间格式依然采用本地字符集对应的日期时间格式。后者对所有客户端应用有效。当两者同时应用时,以 alter session 的修改为准。一、Oracle 的日期函数:Oracle 从 8i 开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、

3、截取等功能。下面是 Oracle 提供的日期函数一览表 Function UseADD_MONTHS Adds months to a dateLAST_DAY Computes the last day of the monthMONTHS_BETWEEN Determines the number of months between two datesNEW_TIME Translates a time to a new time zoneNEXT_DAY Returns the date of the next specified weekdayROUND Rounds a date/t

4、ime value to a specified elementSYSDATE Returns the current date and timeTO_CHAR Converts dates to stringsTO_DATE Converts strings and numbers to datesTRUNC Truncates a date/time value to a specific element二、日期加减:在 Oralce 中,对日期进行加减操作的默认单位是天,也就是说如果我们向当前日期加 1 的话是加上一天,而不是一秒或一小时。那么对一天中的一段时间进行加减要怎么做呢?很简单

5、!只需将它们转化为以天为单位即可。【1】为当前时间加上 30 分钟:SQL select to_char(sysdate, yyyy-mm-dd hh:mi:ss) now_date,2 to_char(sysdate+(30/24/60), yyyy-mm-dd hh:mi:ss) new_date 3 from dual;NOW_DATE NEW_DATE- -2008-06-30 10:47:31 2008-06-30 11:17:31SQL 我们看到了在绿色高亮处使用 30/24/60 将分钟转换成天。另外一个要注意的地方是:SQL*PLUS 环境下默认的日期格式:NLS_DATE_F

6、ORMAT 是 DD-MM-YYYY,也即是不包含时、分、秒,所以我们这里必须采用 to_char 的方式指定输入的日期格式。除此之外也可以通过在 SQL*PLUS 中执行下列语句修改默认的日期输出格式,这样的话就不需要通过 to_char 来转换了,直接输出就行。alter session set nls_date_format=yyyy-mm-dd hh24:mi:ss;【2】为当前时间减去 30 分钟:SQL select to_char(sysdate+(-30/24/60),yyyy-mm-dd hh:mi:ss) new_date from dual;NEW_DATE-2008-0

7、6-30 10:24:59只需要加上一个负数即可以了。三、月份加减:月份的加减和日期加减相比要难了很多,因为每个月份的天数并不是固定的,可能是31,30,29,28。如果采用上面的方法将月份转换成实际天数将不可避免地出现多个判断,幸亏Oracle 为我们提供了一个 add_months 函数,这个函数会自动判断月份的天数。看看下面的例子:【1】为当前时间加上 6 个月:SQL select add_months(sysdate, 6) from dual;ADD_MONTHS-31-12 月-08【2】为当前时间减去 6 个月:SQL select add_months(sysdate, -6

8、) from dual;ADD_MONTHS-31-12 月-07【3】求两个日期相差的月数:通常情况下两个时间相减将得到以天数为单位的结果,可是有时我们更希望得到以月为单位的结果,如果手动转换这太麻烦了,所以 Oracle 又提供了一个函数,这个函数就是months_between。SQL select months_between(sysdate,2 to_date(2008-01-01 01:00:00, yyyy-mm-dd hh:mi:ss) result3 from dual;RESULT-5.94928203months_between 函数有 2 个参数,第一个参数是结束日期,

9、第二个参数是开始日期,Oracle 用第一个参数减去第二个参数得到月份数。所以结果有可能会是负数的。四、年份加减:Oracle 并不直接提供对年份进行加减的函数,不过有了 add_months 和 months_between函数,我们照样可以做到。【1】为当前日期加上 2 年:SQL select add_months(sysdate, 2*12) two_years_later2 from dual;TWO_YEARS_-30-6 月 -10【2】求两个日期相差几年:SQL select months_between(sysdate, 2 to_date(2006-06-30, yyyy-

10、mm-dd) / 12 years_between3 from dual;YEARS_BETWEEN-2直接将两个日期相减,然后除以 365 天并不准确,但是不管一年有多少天它总是只有 12 个月,所以利用这一点我们可以先求出两个日期相差的月数,再除以 12 就得出相差的年数了五、求每月的最后一天:SQL select last_day(add_months(sysdate,2) last_day2 from dual;LAST_DAY-31-8 月 -08六、求每月的第一天:Oracle 提供了 last_day 让我们能够求出所在月份的最后一天,但没有对应的 first_day 函数,如果

11、有这方面的需求,只需要稍微动一下脑筋,利用 last_day 函数即可。例如下面的 SQL 语句就是求出下个月的第一天:SQL select last_day(sysdate)+1 fisrt_day2 from dual;FISRT_DAY-01-7 月 -08在这里我们将“每月的第一天”转换成“ 上个月最后一天的下一天 ”,问题就解决了!七、求下一个星期几:有时候我们会碰上“下个星期五是几号啊?”这样常见的问题。Oracle 为此提供了一个函数:next_day,它的语法是这样的:next_day(date, string)。其中第一个参数 date 告诉Oracle 从什么时候开始算起,

12、第二个参数 string 则告诉 Oracle 要取的工作日。下面我们看看如何得到下个星期五的日期:SQL select next_day(sysdate, Friday) Next Friday from dual;select next_day(sysdate, Friday) Next Friday from dual*ERROR at line 1:ORA-01846: 周中的日无效很奇怪!是不?明明语法没有问题,但为什么会说“周中的日无效”呢?这里就不得不说到Oracle 中的语言和时区的问题了。下面这张图是使用 TOAD 截取出来的客户端 session 的语言和时区信息:图一从图

13、中我们知道了客户端的语言是简体中文,日期使用的语言也是简体中文,这就是为什么上面的 SQL 语句出错的原因了,因为在中文中只有“ 星期一,星期二”这样的工作日表示,而没有“Monday,Firday”这样的写法!SQL select next_day(sysdate,星期五) 下周五 from dual;下周五-04-7 月 -08如果你不确定自己的时区或者你担心从一个时区移植到另一个时区时,SQL 语句会出错,Oracle 还允许你用数字的形式来表示工作日。但是要记得一点:1 表示的是周日,2 表示的是周一,3 表示的是周二,依此类推。例如我要查下个周三是什么时候,则函数是这样写的:next_day(sysdate, 4)。SQL select next_day(sysdate,4) from dual;NEXT_DAY(S-02-7 月 -08看一下日历是不是正确的,确实不错!呵呵

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号