请教个日期补足0问题

小可同学 2012-10-09 02:33:16
比如:
2012112,应该是20120112,
2012812,应该是20120812,
2012112,应该是20121102,
有没有什么方法直接select出后面的结果的,我to_date的时候就出错了,01861,01830
...全文
146 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小可同学 2012-10-10
  • 打赏
  • 举报
回复
下班了
johnny_ 2012-10-09
  • 打赏
  • 举报
回复
结贴撒。
小可同学 2012-10-09
  • 打赏
  • 举报
回复
谢谢楼上的朋友们,针对你们给的写法,我自己也写了个。

declare
dateStr varchar2(20);
begin
dateStr := '201219';
dbms_output.put_line( substr(dateStr,0,4) ||
case length(substr(dateStr,5))
when 3 then '0' || substr(dateStr,5)
when 2 then '0' || substr(dateStr,5,1) || '0' || substr(dateStr,6,1)
else substr(dateStr,5) end );
end;
johnny_ 2012-10-09
  • 打赏
  • 举报
回复
针对第二个那种没有歧义的数据,这样应该可以

select to_date(decode(substr(datestr,5,1),'1',datestr,substr(datestr,1,4)||'0'||substr(datestr,5)),'yyyymmdd') from tablename;
tobarman 2012-10-09
  • 打赏
  • 举报
回复

WITH t AS
(SELECT '201101' num FROM dual
UNION ALL
SELECT '20111' num FROM dual
UNION ALL
SELECT '201111' num FROM dual)
SELECT CASE WHEN length(num) = 6 THEN num
WHEN length(num) = 5 THEN substr(num,1,4)||'0'||substr(num,5,1)
ELSE '日期错误' END
FROM t
小可同学 2012-10-09
  • 打赏
  • 举报
回复
那针对第二个数据如何处理补足0呢,数据没有歧异的情况下。
yuppy 2012-10-09
  • 打赏
  • 举报
回复
select to_date('2012112', 'yyyymmdd') from dual ---- 肯定是 2012/11/2
yuppy 2012-10-09
  • 打赏
  • 举报
回复
yyyymmdd 这里的mm必须是2个的。 你应该在数据上面想办法。
reg13141 2012-10-09
  • 打赏
  • 举报
回复
你这个有歧义 啊,2012112,到底是20120112还是20121102,
是要哪一个,还是2个都要啊

17,377

社区成员

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

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