Oracle默认时间格式Date格式转换
默认时间格式:
1、Oracle的⽇期格式
Oracle缺省的时间格式即时间数据的显⽰形式,与所使⽤的字符集有关。⼀般显⽰年⽉⽇,⽽不显⽰时分秒。
例如,使⽤us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显⽰为:28-Jan-2003,使⽤zhs16gbk字符集(或其他中⽂字符集)的时间格式缺省显⽰为:2003-1⽉-28。
oracle 时间转换向表中插⼊数据时,如果不使⽤转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插⼊。
查看当前会话的时间格式,可以使⽤以下的SQL语句:
SQL> select sysdate from dual;
2、修改Oracle⽇期格式的⽅法
(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窗⼝,缺省的都是这种时间格式。修改服务器端的注册表⽆效,只有修改客户端的注册表才有效。
(3)Linux下:oracle⽤户编辑 .bash_profile下加⼊以下内容
export  NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS '
重新登录即可⽣效
(4)⽤sysdba登录
然后更新props$这个表⾥的字段即可
update props$ set value = 'YYYY-MM-DD HH24:MI:SS' where parameter = 'NLS_DATE_FORMAT';
DATE格式转换:
⼀、在使⽤Oracle的to_date函数来做⽇期转换时,很多Java程序员也许会直接的采⽤“yyyy-MM-dd  HH:mm:ss”的格式作为格式进⾏转换,但是在Oracle中会引起错误:“ORA  01810  格式代码出现两次”。
如:select  to_date( '2005-01-01  13:14:20 ', 'yyyy-MM-dd  HH24:mm:ss ')  from  dual;
原因是:SQL中不区分⼤⼩写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采⽤了mi代替分钟。
select  to_date( '2005-01-01  13:14:20 ', 'yyyy-MM-dd  HH24:mi:ss ')  from  dual;
⼆、另要以24⼩时的形式显⽰出来要⽤HH24
假设当前时间为:2013-11-25 18:45:32
select  to_char(sysdate, 'yyyy-MM-dd  HH24:mi:ss ')  from  dual;//mi是分钟            2013-11-25 18:45:32
select  to_char(sysdate, 'yyyy-MM-dd  HH24:mm:ss ')  from  dual;//mm会显⽰⽉份  2013-11-25 18:11:32
1.⽇期格式参数及其含义说明
D              ⼀周中的星期⼏
DAY        天的名字,使⽤空格填充到9个字符
DD          ⽉中的第⼏天
DDD      年中的第⼏天
DY          天的简写名
IW          ISO标准的年中的第⼏周
IYYY      ISO标准的四位年份
YYYY    四位年份
YYY,YY,Y      年份的最后三位,两位,⼀位
HH        ⼩时,按12⼩时计
HH24    ⼩时,按24⼩时计
MI        分
SS        秒
MM      ⽉
Mon    ⽉份的简写
Month  ⽉份的全名
W        该⽉的第⼏个星期
WW    年中的第⼏个星期
1.⽇期时间间隔操作
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE FROM dual;
当前时间减去7⼩时的时间
select sysdate,sysdate - interval '7' HOUR FROM dual;
当前时间减去7天的时间
select sysdate,sysdate - interval '7' DAY FROM dual;
当前时间减去7⽉的时间
select sysdate,sysdate - interval '7' MONTH FROM dual;
当前时间减去7年的时间
select sysdate,sysdate - interval '7' YEAR FROM dual;
时间间隔乘以⼀个数字
select sysdate,sysdate - 8*interval '2' HOUR FROM dual;
2.⽇期到字符操作
select  sysdate,to_char(sysdate,’yyyy-mm-dd  hh24:mi:ss’)  from  dual
select  sysdate,to_char(sysdate,’yyyy-mm-dd  hh:mi:ss’)  from  dual
select  sysdate,to_char(sysdate,’yyyy-ddd  hh:mi:ss’)  from  dual
select  sysdate,to_char(sysdate,’yyyy-mm  iw-d  hh:mi:ss’)  from  dual
参考oracle的相关关⽂档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)  3.字符到⽇期操作
select  to_date(’2003-10-17  21:15:37’,’yyyy-mm-dd  hh24:mi:ss’)  from  dual
具体⽤法和上⾯的to_char差不多。