你所在的位置: 首页 > Oracle > OCP >
最新开班 班级 报名状态
8月17日 RHCSA脱产班 已报满
10月13日 RHCE周末班 已报满
11月18日 RHCSA脱产班 已报满
11月2日 RHCSA周末班 已报满
12月2日 红帽专题班 已报满
12月16日 红帽专题班 已报满
12月23日 红帽专题班 已报满
3月03日 RHCSA脱产班 热招中
4月23日 RHCSA脱产班 热招中
7月24日 红帽RHCE暑假 热招中
  • 博赛网络ICT就业班热招中
  • 博赛推出Oracle OCM实战课程

Oracle:时间运算

时间:2013-11-14 16:50 作者:Superthink 点击:

Oracle:时间运算

  SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

  Session altered.

  SQL> select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual;

  SYSDATE SYSDATE+1/24 SYSDATE+1/1440 SYSDATE+1/86400

  ------------------- ------------------- ------------------- -------------------

  2008-04-16 21:23:19 2008-04-16 22:23:19 2008-04-16 21:24:19 2008-04-16 21:23:20

  24表示是1天,1/24表示是1小时,1/1440表示1分钟,1/86400表示1秒

  ①Oracle中的日期时间存储

  oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关。不存贮秒以下的时间单位。

  ②Oracle中的日期时间显示:

  通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。

  ③Oracle中的日期时间插入:

  向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。

  ④Oracle中的日期时间格式修改:

  a.SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

  b.册表\hkey_local_machine\software\oracle\home0主键中增加一个字串(8i版本),字串名为nls_date_format,字串的值为你希望定义的时间格式

  前者只对当前会话有效,也即是一旦你关闭了SQL*PLUS窗口或重新打开一个SQL*PLUS窗口,日期时间格式依然采用本地字符集对应的日期时间格式。后者对所有客户端应用有效。当两者同时应用时,以alter session的修改为准。

  一、Oracle的日期函数:

  Oracle从8i开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、截取等功能。下面是Oracle提供的日期函数一览表

  Function

  Use

  ADD_MONTHS

  Adds months to a date

  LAST_DAY

  Computes the last day of the month

  MONTHS_BETWEEN

  Determines the number of months between two dates

  NEW_TIME

  Translates a time to a new time zone

  NEXT_DAY

  Returns the date of the next specified weekday

  ROUND

  Rounds a date/time value to a specified element

  SYSDATE

  Returns the current date and time

  TO_CHAR

  Converts dates to strings

  TO_DATE

  Converts strings and numbers to dates

  TRUNC

  Truncates 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,

  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:31

  SQL>

  我们看到了在绿色高亮处使用30/24/60将分钟转换成天。另外一个要注意的地方是:SQL*PLUS环境下默认的日期格式:NLS_DATE_FORMAT是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-06-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) from dual;

  ADD_MONTHS

  31-12月-07

(责任编辑:Superthink)

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)