oracle的‘转换函数’怎么转啊

gggmcse 2010-01-30 05:41:59
如题,我从mysql向oracle里导入了一个表,表里面有个birthday的列,在原来在mysql里面此列是date类型的,可是向oracle导入时老是报错,但是把date变成varchar就导进去了,我现在把birthday以varchar字符类型导入了oracle里面所以
现在需要把oracle里面的varchar变成date,在网上查需要转换函数,请问大侠如何转换,具体点,比如在哪里敲那个命令。


谢谢各位大侠,小弟写的罗嗦了点,各位莫怪!
...全文
93 17 打赏 收藏 举报
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
我查了下资料,通过sql server可以转换下,但是还是不能导入到Oracle
语句是这样的:
select *,
convert (smalldatetime ,bday) as bday
from user1
namgking 2010-01-31
  • 打赏
  • 举报
回复
应该还是数据的问题,如果确定是yyyy-mm-dd的格式,应该不会有问题的。
检查下数据格式吧。
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
bday列是这样的
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
确定是啊,数据原来在mysql里面,是date类型,默认是0000-00-00,用户填写后就是用户的生日了,不知大侠明白么?现在以varchar2导入到Oracle里了还是以0000-00-00这种格式显示的
namgking 2010-01-31
  • 打赏
  • 举报
回复
把这个列的数据贴上来看看
namgking 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gggmcse 的回复:]
8楼说的,我直接输入:
select to_date(bday||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') from bbs

其中bday是列名,bbs是表名,仍然报错说是‘无效的月份’

是不是我输入错了啊?本人小菜鸟,莫笑
[/Quote]
你确定你的数据格式是yyyy-mm-dd的格式?
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
8楼说的,我直接输入:
select to_date(bday||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') from bbs

其中bday是列名,bbs是表名,仍然报错说是‘无效的月份’

是不是我输入错了啊?本人小菜鸟,莫笑
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
我查了下资料,可以用convert 或者cast转换,我自己正在研究中,有结果了告诉大家
namgking 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gggmcse 的回复:]
大侠crazylaa所说的方法:select  to_date(col_name,'YYYY-MM-DD HH24:MI:SS') from tbl
我试了下,提示‘ORA-01843:无效的月份’不知道是怎么回事。

还有就是我要转换的是一列的数据,都是‘0000-00-00’格式的,4、6楼的大侠所举的例子是不是针对
某个特定的值?我不是很理解,本人太菜了,大侠莫怪嘿嘿,请说滴再明白点点……
[/Quote]
你原先的格式是0000-00-00,说明是yyyy-mm-dd的格式
那就select to_date(col_name||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') from tbl
这样查询出来的数据就是0000-00-00 00:00:00的date类型格式
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
大侠crazylaa所说的方法:select to_date(col_name,'YYYY-MM-DD HH24:MI:SS') from tbl
我试了下,提示‘ORA-01843:无效的月份’不知道是怎么回事。

还有就是我要转换的是一列的数据,都是‘0000-00-00’格式的,4、6楼的大侠所举的例子是不是针对
某个特定的值?我不是很理解,本人太菜了,大侠莫怪嘿嘿,请说滴再明白点点……
gggmcse 2010-01-31
  • 打赏
  • 举报
回复
报告各位大侠,我有解决办法了虽然很复杂呵呵

1,将mysql的原文件以.sql 文件导出,修改原文件中的0000-00-00为‘null’
2,将修改好的文件再导回mysql,并把date修改为varchar
3,将修改好的表以varchar导入sql server
4,用sql server把表导入Oracle的date中

至此,大功告成!
注意:第三步中,不经过sql server直接导入oracle 的date不可以,我做过实验了,不知为什么,还望大侠解释!

感谢各位大侠的帮助!感激!
yangyinbo 2010-01-30
  • 打赏
  • 举报
回复
INSERT INTO TEST VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYYY-MM-DD HH24:MI:SS' ) ) ;
randy_ideal 2010-01-30
  • 打赏
  • 举报
回复
1. add新列,类型为date
2. 新列内容根据旧列update,to_date
3. drop掉旧列
4. 重命名新列为旧列名
碧水幽幽泉 2010-01-30
  • 打赏
  • 举报
回复
这要看你转换的日期格式是什么
现列举几种:
select to_date('20100130','yyyymmdd') from dual;
select to_date('01-5月-05','dd-mon-yy') from dual;
select * to_date('2010-01-30 18:30:00','YYYY-MM-DD HH24:MI:SS') from dual;
....
还有很多!
crazylaa 2010-01-30
  • 打赏
  • 举报
回复
以上,Y代表年,M代表月,D代表日,HH24代表24小时制的时,MI分,SS秒,按照你的varchar字段这6项的排列来对应组合,注意空格等。
crazylaa 2010-01-30
  • 打赏
  • 举报
回复
select to_date(col_name,'YYYY-MM-DD HH24:MI:SS') from tbl
多了个星。
crazylaa 2010-01-30
  • 打赏
  • 举报
回复
select * to_date(col_name,'YYYY-MM-DD HH24:MI:SS') from tbl
发帖
Oracle 高级技术

3473

社区成员

Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
帖子事件
创建了帖子
2010-01-30 05:41
社区公告
暂无公告