如何将DATE类型转换成VARCHAR2类型????

jimojialuo 2010-09-15 09:34:55
比如2010/09/15是DATE类型 不用TO_CHAR()的方法,怎么转换成VARCHAR2类型,效率要高些。
有可能数据有几十万笔。
...全文
1000 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
shjp123 2010-09-17
  • 打赏
  • 举报
回复
引用 4 楼 java3344520 的回复:
select name,''||birth from tb;
好想法。


minitoy 2010-09-16
  • 打赏
  • 举报
回复
to_char不用的话怎么指定格式转换呢?上面的转换都是以来NLS_DATE_FORMAT参数的,你怎么保证不同数据库环境得到的数据还一样?毫无道理的规定啊.
minitoy 2010-09-16
  • 打赏
  • 举报
回复
呵呵...
连to_char都不能用了
fly2749 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java3344520 的回复:]

select name,''||birth from tb;
满足你要求?
[/Quote]
感觉这种方法会有日期格式限制,可以做格式修改么,做个处理什么的
xysdtc1986 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java3344520 的回复:]
select name,''||birth from tb;
满足你要求?
[/Quote]

这个不就相当于to_char么。。。
Dream_1986 2010-09-16
  • 打赏
  • 举报
回复
--这个好用,呵呵呵
select name,''||birth from tb;
Dream_1986 2010-09-16
  • 打赏
  • 举报
回复
学习下。。。
duqiangcise 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 zhone 的回复:]
引用 29 楼 duqiangcise 的回复:

引用 4 楼 java3344520 的回复:
select name,''||birth from tb;
满足你要求?


有可能你经过‘’||birth处理后的日期格式和varchar2类型的时间格式不一致。
如:经过''||birth后的字符串是'23-1月 -82',而另外一个表中的格式是'2010-09-16 12:3……
[/Quote]
那你也要看转换后的数据格式是否一致。
kingkingzhu 2010-09-16
  • 打赏
  • 举报
回复
''||sysdate 还不是要调用to_char 道理一样吧
几十万笔不算啥 就用to_char吧
心中的彩虹 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jimojialuo 的回复:]
引用 4 楼 java3344520 的回复:
select name,''||birth from tb;
满足你要求?

解释下。。
[/Quote]
就是转为字符的意思
心中的彩虹 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 jimojialuo 的回复:]
比如2010/09/15是DATE类型 不用TO_CHAR()的方法,怎么转换成VARCHAR2类型,效率要高些。
有可能数据有几十万笔。
[/Quote]

--更新的时候改下会话的时间格式 SQL> alter session set nls_date_format='yyyymmdd',把它隐性转为字符就可以了,下面是个例子

SQL> create table test6(id number,dt date,ch varchar2(8))
2 /

表已创建。

SQL> edi
已写入 file afiedt.buf

1 insert into test6(id,dt) select 1,to_date('2010-09-15','yyyy-mm-dd') from dual
2 union all
3* select 2,to_date('2010/08/15','yyyy/mm/dd') from dual
SQL> /

已创建2行。

SQL> commit
2 /

提交完成。

SQL> alter session set nls_date_format='yyyymmdd'
2 /

会话已更改。

SQL> update test6 set ch=''||dt
2 /

已更新2行。

SQL> commit
2 /

提交完成。

SQL> select * from test6
2 /

ID DT CH
---------- -------- --------
1 20100915 20100915
2 20100815 20100815


stone1116 2010-09-16
  • 打赏
  • 举报
回复
有时候数据库升级后就会有限制,不同版本是不一样的
WXHDSWH 2010-09-16
  • 打赏
  • 举报
回复
alter tablename modify date varchar2(30)
zhone 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 duqiangcise 的回复:]

引用 4 楼 java3344520 的回复:
select name,''||birth from tb;
满足你要求?


有可能你经过‘’||birth处理后的日期格式和varchar2类型的时间格式不一致。
如:经过''||birth后的字符串是'23-1月 -82',而另外一个表中的格式是'2010-09-16 12:30:30'

所以我认为还是用to_char()把……
[/Quote]

话说,如果在sqlserver里面也是以上这情况的话,是不是楼主可以考虑这么用?
duqiangcise 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java3344520 的回复:]
select name,''||birth from tb;
满足你要求?
[/Quote]

有可能你经过‘’||birth处理后的日期格式和varchar2类型的时间格式不一致。
如:经过''||birth后的字符串是'23-1月 -82',而另外一个表中的格式是'2010-09-16 12:30:30'

所以我认为还是用to_char()把date型的数据,转换成对应格式的字符串最好。
taikongxinke 2010-09-16
  • 打赏
  • 举报
回复
路过,学习!!!
jimojialuo 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 minitoy 的回复:]
不同产品兼容的确是个麻烦事,要不干脆不用date类型,直接都用varchar好了。
[/Quote]

是啊 BS公司! 但是数据库的表不是我们建的,只能这么用,唉,杯具啊。。。
minitoy 2010-09-16
  • 打赏
  • 举报
回复
不同产品兼容的确是个麻烦事,要不干脆不用date类型,直接都用varchar好了。
jimojialuo 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 gelyon 的回复:]
才几十万笔???很多蛮? 我每个表中数据至少都是上百万,照样用to_char()函数来进行时间字串的格式转换

搞的那么复杂干啥子嘛?你不去试一下,你咋知道就不得行呢?非要听你们领导说不能用to_char啊?变态TL
[/Quote]
这不是领导说的,是公司的系统。公司开发的软件是支持多数据库的,to_char() 函数在SQL SERVER不支持,你说可以用不 ?几十万笔我也只是举举例子而已,这几百万的也很多。
archwuke1 2010-09-16
  • 打赏
  • 举报
回复
我想把表a里的f1字段从1改成2,不许用update语句

加载更多回复(14)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧