字符串“Fri Mar 19 18:01:37 CST 2010”,在oracle中如何将它转换成日期格式?
重新执行下这个语句。。。
[code="sql"]UPDATE EFP_MEMBER_GENERAL_INFO set CREATION_DATE_BAK = to_date(REPLACE( CREATION_DATE,'CST',''),'Dy Mon DD HH24:MI:SS YYYY') + interval '14' hour where EFP_MEMBER_ID = 142 [/code]
把
[code="sql"]REPLACE( CREATION_DATE,'')[/code]
改成
[code="sql"]REPLACE( CREATION_DATE,'CST','')[/code]
文字打太多了,没注意那个CST。。。。
[code="sql"]update {表名} set {被附的字段(date型)} = to_date(REPLACE({你的字符串格式的字段},'CST',''),'Dy Mon DD HH24:MI:SS YYYY') + interval '14' hour where {你自己的过虑条件({你的字符串对应的字段 like '%CST%'})} [/code]
使用oracle的日期转换函数to_date()。。
感觉只能先把
CST这几个字符串先拿掉,才能转
比如
SELECT to_date(REPLACE('Fri Mar 19 18:01:37 CST 2010','CST',''),'Dy Mon DD HH24:MI:SS YYYY') FROM DUAL;
上网查了CST时间与北京时间的时间差好像是14小时
SELECT to_char(to_date(REPLACE('Fri Mar 19 18:01:37 CST 2010','CST',''),'Dy Mon DD HH24:MI:SS YYYY') + interval '14' hour,'DY D Mon DD HH24:MI:SS YYYY') FROM DUAL;
select sysdate - interval '7' day from dual
1、减号可以换成加号;
2、day 可以换成 minute、hour、month、year
只知道转换,学习一下
TO_DATE(string,'format')
将字符串转化为ORACLE中的一个日期
update {表名} set {被附的字段(date型)} = to_date(REPLACE({你的字符串格式的字段},''),'Dy Mon DD HH24:MI:SS YYYY') + interval '14' hour where {你自己的过虑条件}
你那字符串格式不对,表里有不合法的数据,看报错信息觉得是年份不对
你先select REPLACE({你的字段},'CST','') from 表
看哪个时间格式不符合这种格式的
Fri Mar 19 18:01:37 2010
或者年份不是在 -4713 and +9999 范围内的
如果使用replace的话,那么出来的应该是这种格式的,比如说今天吧,22-3月 -10
它会把年份的前两位去掉,只是保留后两位的。。。肯定不在那个范围内的。。
那你就加过虑条件,比如
update {表名} set {被附的字段(date型)} = to_date(REPLACE({你的字符串格式的字段},''),'Dy Mon DD HH24:MI:SS YYYY') + interval '14' hour where {你自己的过虑条件({你的字符串对应的字段 not like '%GMT%'})}
GMT 跟北京时间的时间差是+8
也就是常说的GMT +8
说明你的时间还有很多不统一的格式,年份不在-4713 and +9999,
或者Fri Mar 19 18:01:37 CST 2010,Fri Mar 19 18:01:37 GMT 2010
除这两种格式外,还有很多不确定的格式,你得先把他们排除掉
或者这样
update {表名} set {被附的字段(date型)} = to_date(REPLACE({你的字符串格式的字段},''),'Dy Mon DD HH24:MI:SS YYYY') + interval '14' hour where {你自己的过虑条件({你的字符串对应的字段 like '%CST%'})}
把not like '%GMT%'
改成 like '%CST%'
试试
思路应该是这样的,至于你里面的数据是否都是这种格式只能你自己去 检查了。
你把你的SQL贴出来
CST时间与北京时间的时间差好像是14小时
GMT 跟北京时间的时间差是+8
也就是常说的GMT +8
如果你不要北京时间,也可以去掉(看你数据使用的是哪个国家的时间了?)
嗯 :D :D :D