数据库中的类型是varchar2的,其实存储的是8位日期。如20010910 表示2001年9月10日
但现在有很多数据是不规则的2007.8.5,2007.10.5,2007.9.2,2007.4 要转换为8位日期字符串
需要将上面的转换为20070805,20071005,20070902,20070400
这条sql应该如何写。
但现在有很多数据是不规则的2007.8.5,2007.10.5,2007.9.2,2007.4 要转换为8位日期字符串
需要将上面的转换为20070805,20071005,20070902,20070400
这条sql应该如何写。
解决方案 »
- 有人用过Weblogic的JCOM吗?在VB6中调用不成功
- ORACLE查询试图提示 ORA-01722: 无效数字
- ORACLE 缺少逗号 问题 ?
- SQL*Loader-704: 内部错误: ulconnect: OCIServerAttach [0]
- 求教,我想从所有表中查一个数据怎么办?
- 如何把当前用户下的所有表的表结构,字段信息都导成表格形式
- 性能調整?
- 请教:WIN2003安装ORALCE 9客户端后,在ODBC中找不到ORACLE的驱动
- 请教一个简单的SQL语句,解决马上结分。
- power designer and trigger
- 求改oracle语句
- plsql 连接 vpn 下的ORACLE问题!
TO_CHAR(TO_DATE('2007.8.5','YY
------------------------------
20070805
SQL>
where a.col like '%.%'
update table a set a.col=to_char(to_date(a.col,'yyyy-mm-dd'),'yyyymmdd')
where translate(a.col,'.'||a.col,'.')='..';
update table a set a.col=to_char(to_date(a.col,'yyyy-mm'),'yyyymmdd')
where translate(a.col,'.'||a.col,'.')='.';
SQL> with tb as
2 (select '2007.8.5' dt from dual union all
3 select '2007.10.5' dt from dual union all
4 select '2007.9.2' dt from dual union all
5 select '2007.4' from dual
6 )
7 select case when
8 instr(dt,'.',1,2)=0 then to_char(to_date(dt,'yyyy.mm'),'yyyymm')||'00'
9 else to_char(to_date(dt,'yyyy.mm.dd'),'yyyymmdd') end
10 from tb
11 /CASEWHEN
--------
20070805
20071005
20070902
20070400
with tb as
(
select '2007.8.4' td from dual union all
select '2007.8/04' td from dual union all
select '2008-10.5' from dual union all
select '2009/5' from dual union all
select '2009.12' from dual
)select
case when len(td)>=8 then to_char(to_date(td,'yyyy-mm-dd'),'yyyymmdd')
else to_char(to_date(td,'yyyy-mm'),'yyyymm')||'00' end td from tb TD
1 20070804
2 20070804
3 20081005
4 20090500
5 20091200