oracle时间数据格式的分析

在网上看见不少oracle新学者对oracle的时间格式很烦,经常是设计了一个带时间字段的表之后,向表插入数据失败。回想起自己刚开始学习oracle时,也对这个时间格式摸不着头脑,虽然是小小的问题,高手们不屑于讨论,但对初学者来讲,这也是一个不大不小的坎,没找到门路的话, 可能几天都过不去,其实就是一层窗户纸,没什么难的。这里做一个简单的小结,因水平有限,请高手补充指正。

1 oracle对时间格式的数据存贮

oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清楚,请高手补充。存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位。因此在一些前台支持毫秒级的程序(如PB客户端程序)连接到oracle数据库时应注意这点。查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。

2 oracle时间显示形式

通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。例如,使用us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显示为:28-Jan-2003,而使用zhs16gbk字符集(或其他中文字符集)时时间格式缺省显示为:2003-1月-28。向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。查看当前会话的时间格式,可以使用以下的SQL语句:

SQL> select sysdate from dual;

3 向oracle表中插入时间格式的数据

向oracle表插入时间格式的数据是一个相对来讲比较麻烦的事情,要么你严格遵从当前会话的时间格式书写你的时间值,要么使用转换函数自定义时间数据的格式。有两个与时间相关的转换函数:to_char 和 to_date 。to_char(时间值,时间格式)函数将时间值转换为字符串形式,通常在查询中使用;to_date(字符串,时间格式)则把格式字符串转换时间值,通常在insert 语句中使用。在日期格式中,各种日期格式

分量这里不作详细的讨论,请查oracle帮助文档中这两个函数的用法,或者查一查PL/SQL编程的书,讲得很详细的。

4 如何修改会话中的日期格式

修改当前会话中的日期格式据说有三种办法,我只做过前两种办法的试验,修改glogin.sql文件的办法我没有试过,不知道是不是真的能行。下面一一解说。

(1) 在sql*plus中修改当前会话的日期格式

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

将当前会话的时间格式修改为这种格式: 2003-01-28 15:23:38,即四位年-两位月-两位日,空格,24小时的制的小时:分钟:秒。

这种修改方法,只对当前会话有效。注意,是对当前会话,而不是当前的sql*plus窗口。即如果你这样修改之后,又使用connect命令以其他用户连接到数据库或者是连接到其他的数据库,则这个日期格式就失效了,又恢复到缺省的日期格式。

(2) 修改注册表(只对windows系统)

在注册表\hkey_local_machine\software\oracle\home0主键中增加一个字串(8i版本),字串名为nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:ss ,然后重新启动sql*plus。

这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。

unix系统下有没有这类似的方法,我不知道,我不会用unix或者是linux系统。

(3) 修改$oracle_home\sqlplus\admin目录中glogin.sql文件

这种方法我没有试过,不敢乱说,以免误导大家。请了解这种方法的高手来指教。

5 日期格式的优先级

如果在一个具体的环境中,既修改了注册表,又使用alter session命令修改了当前会话,那么哪一种修改方法有效呢?alter session命令有效,它的优先级是最高的。即不管当前的客户端环境是什么样的,

注册表修改成什么样子了,只要你使用了alter session命令来修改了时间格式,那么就以你修改后的时间格式为准。

因此,如果直接使用sql*plus交互式查询或插入时间格式的数据,两种方法都可以用。如果使用sql文件来进行批量的插入或者是定时执行,最好在使用时间数据前使用alter session命令来修改会话,以保证这个sql语句的正常运行与环境无关。同样的,如果是前台的客户端程序中需要使用到时间格式的数据,最好也在使用之前修改会话,或者使用to_char或to_date函数进行转换(强烈推荐使用转换函数),以保证

程序运行与环境无关。

小结:

oracle数据库中有关时间类型的数据,定义了很多函数,特别是关于时间数据的计算,非常方便,当然,方便的前提是你对oracle的时间函数比较熟悉。在这里我有时候看到有些人存贮时间类型的数据时使用字符串类型的字段,我强烈的反对这种做法,不论是从系统的开销,还是从时间数据的计算来讲,或者是取这个数据中的某一个子数据,比如取时间中的月,取时间中的星期等等,都不如直接存贮为时间类型的数据来得方便。只要熟悉了oracle关于时间的函数,我相信大家会喜欢上oracle时间类型的数据的,非常灵活,功能强大,几乎可以做你所能想到的关于时间的一切事情——就看你对oracle的时间函数掌握程度了.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 00:18:19

oracle时间数据格式的分析的相关文章

Oracle Table连接方式分析

Oracle Table连接方式分析 表连接基本知识: 1.哪张表将驱动查询(即访问的第一张表)?按照指定的路径查询,何时将访问到没一张表?可选的驱动路径有哪些? 2.可能出现哪些Oracle连接?记住:在Oracle中,连接顺序.可选的索引.用于排序和建立散列表的可用内存的不同都会导致不同的结果. 3.哪些索引是可用的?哪些索引是可选的?索引的选择不仅仅将导致优化器使用或者限制一个索引,还将改变驱动查询的方式,并可能决定使用或者限制查询中其他的索引. 4.哪些提示提供了可选的路径?哪些提示限制

oracle时间模型

Oracle在9i或者早期的版本,对于性能优化方面,主要采用命中率模型,后面的版本,也保留着命中率模型,比如在awr报告中,Instance Efficiency Percentages (Target 100%)就有关于buffer cache,library cache等相关的命中率. 命中率在性能优化时主要体现在: 当命中率不高时,可以通过参数的调整,提高命中率,从而可以提高系统的处理能力 不过命中率的弊端也显而易见: 命中率无法看到系统的cpu和IO处理能力的分配. 当系统存在性能问题时

Oracle时间日期函数

ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年                显示值:07        yyy three digits 三位年                显示值:007        yyyy four digits 四位年                显示值:2007                    Month

oracle 时间函数

加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from dual; --加1月 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from

oracle时间处理

--查询日期语言种类 select * from V$NLS_PARAMETERS; select * fromnls_session_parameters --TO_DATE(null)的用法(插入null字段??) select 1, TO_DATE(null) from dual; --实际时间2012-12-04 18:22  测试结果如下: --24小时显示方式---需用  HH24:mi:ss这个形式 select to_char(sysdate,'yyyy-MM-dd HH24:m

【Oracle】Oracle时间日期格式

to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,"转换格式" ) 即把给定的日期按照"转换格式"转换. 转换的格式: 表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年 表示month的:mm 用2位数字表示月:mon 用简写形式 比如11月或者nov :m

oracle 时间格式

转载 :出处  http://www.2cto.com/database/201209/154722.html设置Oracle PL/SQL时间显示格式NLS_TIMESTAMP_FORMAT Oracle中TIMESTAMP时间的显示格式 Oracle数据库的时间字段我们通常是使用timestamp 格式,在未做设置前, 查询出来的数据类似于“27-1月 -08 12.04.35.877000 上午”, 经过to_char函数转换后得到如下结果:“2008-01-27 00:04:35:877

ORACLE时间函数(SYSDATE)深入理解

加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from dual; --加1月 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from

Oracle 时间,日期 类型函数及参数详解

ORACLE字符数字日期之间转化 Java代码 24 小时的形式显示出来要用 HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; to_date() function 1. 日期格式参数 含义说明 D 一周中的星期几 DAY 天的名字,使用空格填充到 9 个字符 DD 月中的第