`
enet_java
  • 浏览: 55192 次
社区版块
存档分类
最新评论

关于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的时间函数掌握程度了.
分享到:
评论

相关推荐

    oracle partition 深入讨论

    1. 范围分区 (Range partition):根据列值的范围进行分区,例如按日期分区,将数据分为多个时间段。 2. 列表分区 (List partition):基于列值的预定义列表进行分区,适合于有限且固定的值集,如地区代码。 3. 哈希...

    oracle插入日期

    本次讨论的主题是“Oracle插入日期”,这不仅包括了如何在Oracle数据库中插入日期数据的基本操作,还涉及到了一些进阶的操作技巧。 ### Oracle中的日期类型 首先,我们需要了解Oracle数据库中的日期数据类型。...

    oracle返回相差的天数

    本文将围绕如何使用Oracle来实现返回两个日期相差的天数这一功能展开讨论。 ### 一、问题背景 在业务场景中,经常会遇到需要计算两个日期之间间隔天数的情况,例如计算员工工龄、统计项目执行周期等。通过Oracle...

    java日期格式的转换

    下面,我们将详细讨论 Java 中日期格式转换的知识点。 字符串转换为 java.util.Date 在 Java 中,我们可以使用 `SimpleDateFormat` 类将字符串转换为 `java.util.Date` 对象。`SimpleDateFormat` 类提供了多种日期...

    Oracle 中的日期格式转化.docx

    本文将深入探讨Oracle中的TO_DATE和TO_CHAR函数,这两个函数在日期和时间格式转换中扮演着重要角色。 首先,我们来看TO_DATE函数。这个函数用于将字符串转换为日期类型。例如,如果你有一个日期字符串"2008-09-10 ...

    Oracle 连接查询,日期,时间

    接下来,我们讨论Oracle中的日期和时间操作。Oracle支持多种日期和时间数据类型,如DATE、TIMESTAMP、INTERVAL等。在处理日期时,你可以使用内置的函数,如SYSDATE获取当前系统日期,ADD_MONTHS增加或减少月份,...

    ORACLE sql 星期几 一个月的第几天等 方法

    Oracle SQL 提供了多种日期函数和格式化选项,帮助开发者轻松地处理日期相关的计算和格式化。在这个资源中,我们将讨论如何使用 Oracle SQL 来获取星期几、一个月的第几天、一个年的第几天等信息。 一、获取星期几 ...

    Oracle教程

    数据类型部分则介绍了Oracle中支持的各种数据类型,比如数值、字符、日期时间类型等。 7. Oracle体系结构和数据库设计:体系结构部分讨论了Oracle数据库的主要组件,如实例、数据库、表空间、数据文件、控制文件等...

    Oracle中文官方文档

    介绍了Oracle数据库支持的不同数据类型,包括数值、字符、日期等基本类型,以及如何使用它们。 **2.4 对象数据类型及对象视图** 探讨了如何定义和使用复杂的对象数据类型,以及如何创建和查询对象视图。 综上所述...

    [英文]《精通Oracle SQL》(CHM格式)

    2. **数据类型与操作符**:讨论Oracle支持的数据类型,如数值、字符串、日期和时间,以及如何使用算术、比较和逻辑操作符进行数据处理。 3. **查询语句(SELECT)**:详述如何使用SELECT语句来检索数据,包括选择...

    Oracle日期之二

    本文将深入探讨"Oracle日期之二"这一主题,基于提供的标签和压缩包文件内容,我们来详细讨论Oracle中的日期操作。 在Oracle中,日期类型是最基本的数据类型之一,用于存储日期和时间信息。在SQL查询和PL/SQL程序中...

    Oracle env

    5. **`NLS_LANG`**:此变量用于设置语言环境,影响日期和时间的格式化显示等。这里设置为`AMERICAN`,意味着默认使用美国英语作为语言环境。 6. **`ORA_NLS33`**:这是一个特殊的环境变量,用于指定NLS数据文件的...

    Oracle Press - Oracle Database 11g SQL

    11. **数据类型**:详述Oracle支持的各种数据类型,如数值型、字符型、日期时间型、二进制数据等,以及它们在实际应用中的选择。 12. **异常处理**:介绍在PL/SQL中如何捕获和处理错误,以及使用RAISE语句和异常...

    oracle官方SQL教程(ppt格式)

    这份官方SQL教程,以PPT格式呈现,为初学者提供了丰富的学习资源,涵盖了Oracle SQL的基础知识和关键概念。以下将详细介绍这些PPT文件可能包含的主要内容: 1. **Les01.ppt** - 可能介绍了SQL的基础概念,包括SQL的...

    Oracle数据库异地自动备份.pdf

    本文将结合实践经验,讨论UNIX环境下Oracle数据库的自动备份实现方法。 一、数据库export备份 数据库export备份是将Oracle数据库中的数据备份成一个二进制文件,它通常有三种模式:用户模式、表模式和整个数据库...

    oracle查看执行最慢与查询次数最多的sql语句

    在Oracle数据库管理中,了解SQL语句的执行性能和频率对于系统优化至关重要。本文将详细介绍如何查看Oracle数据库中执行最慢和查询次数最多的SQL语句,以帮助DBA(数据库管理员)识别潜在的性能瓶颈。 首先,我们来...

    Oracle数据数据处理教程 Oracle 9i的ETL处理方法 共16页.pdf

    在Oracle 9i中,外部表允许直接从非Oracle格式的数据源读取数据,无需先将其导入到数据库中。这大大提高了数据提取的速度和灵活性。例如,可以创建外部表来直接访问文本文件或XML文档,从而简化数据加载过程。 多表...

    oracle基本数据类型

    本文将详细介绍 Oracle 中的基本数据类型,并讨论它们的特点和使用区别。 字符类型 Oracle 中有多种字符类型,包括 char、varchar、varchar2、long 等。 * char(n):定长字符串,最大长度为 2000 字节。char ...

    Oracle XML核心技术

    尽管题目给出的部分内容主要聚焦于ASP(Active Server Pages)的内嵌对象及其使用方法,但基于题目要求,本文将围绕"Oracle XML核心技术"这一主题展开讨论,同时也会简要提及ASP的相关知识点以确保内容的完整性和准确性。...

    oracle数据库从入门到精通.pdf

    关于Oracle数据类型,文档中介绍了多种数据类型,包括字符型、数值型、日期型、以及二进制型等。字符型数据类型如CHAR和VARCHAR2有着固定的存储长度和可变长度的区别,而LONG类型支持存储大量文本数据。数值型中,...

Global site tag (gtag.js) - Google Analytics