在网上看见不少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_machinesoftwareoraclehome0主键中增加一个字串(8i版本,9i也可以),字串名为nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:ss ,然后重新启动sql*plus.这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。

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

(3) 修改$oracle_homesqlplusadmin目录中glogin.sql文件这种方法我没有试过,不敢乱说,以免误导大家。请了解这种方法的高手来指教。

5 日期格式的优先级

如果在一个具体的环境中,既修改了注册表,又使用alter session命令修改了当前会话,那么哪一种修改方法有效呢?alter session命令有效,它的优先级是最高的。即不管当前的客户端环境是什么样的,注册表修改成什么样子了,只要你使用了alter session命令来修改了时间格式,那么就以你修改后的时间格式为准。

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

小结:

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

oracle 日期改字符格式_oracle 日期转换格式相关推荐

  1. oracle 日期改字符格式_oracle日期格式转换 to_date(),to_char()

    与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用:将字符类型按一定格式转化为日期类型: 具体用法: to_date(''2019-11-27' ...

  2. oracle 日期改字符格式_Oracle时间转换成字符串

    1. 日期和字符转换函数用法(to_date,to_char) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual ...

  3. oracle 聚合函数 日期,Oracle日期函数/字符函数/数字函数/转换函数/聚合函数

    Oracle日期函数: MONTHS_BETWEEN:返回两个日期之间月份的差值 MONTHS_BETWEEN('01-EP-95','11-JAN-94') ===>19.6774194 AD ...

  4. oracle字体加粗函数_Oracle日期操作函数

    Oracle采用date类型表示日期时间,这是一个7字节的固定宽度的数据类型,有7个属性,包括:世纪.世纪中哪一年.月份.月中的哪一天.小时.分钟和秒.本文中把date类型称为日期时间类型,简称日期. ...

  5. oracle日期相减工作日_oracle 日期相减 转载

    转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减 2012-02-10 12: ...

  6. html如何转换音乐格式,音乐怎么转换格式_音乐文件格式怎么转换-系统城

    在生活中,我们常常会通过听一些音乐来放松自己疲惫的身体,有时候听到自己喜欢的歌曲都会下载到自己的电脑上.而有时候下载下来的音乐格式不支持音乐播放器的播放,这时候我们只需要转换一下音乐格式就可以了.那么 ...

  7. oracle 日期改字符格式_oracle怎么把数值型日期转换成日期字符型

    展开全部 oracle把数值型日期转换bai成日期字符du型的操作方法和详细步骤zhi如下: 1.首先dao,将字符串类型版转换为权数字类型. 此方法使用to_number()直接进行转换. 具体语法 ...

  8. oracle 日期改字符格式,如何在oracle10g中将字符串日期转换为日期格式

    My date value is stored as varchar2 and the value is 15/August/2009,4:30 PM, how to convert this to ...

  9. oracle中那个日期怎么相减_oracle日期时间加减规则

    1.日期的加减都是以天为单位的 SELECT to_date('2016-07-05 13:10:00','yyyy-mm-dd hh24:mi:ss') + 1 FROM dual; 结果:2016 ...

最新文章

  1. Fragment 和 FragmentActivity的使用
  2. 保护ASP.NET 应用免受 CSRF 攻击
  3. CSS3--2D3D的使用
  4. QM法化简C语言程序,QM基础教程
  5. OpenStack 的部署T版(一)——基础环境配置
  6. Psych101(part1)--Day1
  7. java servlet 转发和重定向_JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
  8. PhoneGap插件入门(转)
  9. poj 1182 食物链 并查集
  10. 一篇搞定 Redis6(完整版)
  11. 缓存与缓冲的区别 cache与buffer的区别
  12. java高级面试篇之redis面试收集总结/62题附答案)
  13. PTA 7-31 掉入陷阱的
  14. python请输入一个三位数输出该三位数的逆序数_键盘输入一个三位数,输出逆序后的数...
  15. MPI + OpenMP实现快速排序
  16. mysql 经纬度范围_根据经纬度查询最近距离,mysql查询经纬度附近范围
  17. 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸
  18. Creo4.0安装与VS2015环境下的开发配置
  19. 关于黑马视频String 与int之间相互转化
  20. shell脚本中编写SQL中 以传参(${accdate})的方式 动态:求 前12个月的日期和求 前一周(7天的日期)

热门文章

  1. 高继承性(HTML、CSS)
  2. java水仙花数代码_java知识分享篇(五)
  3. 我所期待的vs2007
  4. angularJS表达式详解!
  5. html设置在父元素底部对齐,如何将div对齐到父元素的底部
  6. 修改时无论改成什么,值总是默认为1
  7. Memento - 备忘录模式
  8. java hashset 源码_Java集合:HashSet的源码分析
  9. Java多线程Queue_Java多线程-BlockingQueue-ArrayBlockingQueue-LinkedBlockingQueue
  10. python ftp编程_Python编程-FTP