楼主: lastwinner

[精华] 用至少三种不同的写法实现逐字重复

[复制链接]
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
21#
发表于 2012-3-4 22:42 | 只看该作者

with t  as (select rownum+64 n from dual connect by rownum<=3),
     t2 as (select replace(sys_connect_by_path(chr(n),','),',') str
              from t
             where level>=2
             start with n=65
           connect by nocycle n!=prior n )
select listagg(substr(a.str,b.column_value,1)||substr(a.str,b.column_value,1)) within group (order by b.column_value) res
   from (select rownum id,str from t2) a,table(cast(multiset(select rownum from dual connect by rownum <= length(a.str)) as sys.odcinumberlist)) b
group by a.id
order by a.id

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
22#
 楼主| 发表于 2012-3-5 02:37 | 只看该作者
真迅猛!方法早已不止三种,狂赞各位!
等待兔子、guostong、bell等人出招!

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
23#
发表于 2012-3-5 09:35 | 只看该作者
lastwinner 发表于 2012-3-5 02:37
真迅猛!方法早已不止三种,狂赞各位!
等待兔子、guostong、bell等人出招!

其实就是行复制的方法,至少6种,加上简单的函数与NEWKID的最简单的正则方法有至少8种了。。。

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
24#
发表于 2012-3-5 20:51 | 只看该作者
我承认我是个懒人。我很无赖地几乎照抄了野花的代码:

with t as (select rownum+64 n from dual connect by rownum<=3),
t2 as (select replace(sys_connect_by_path(chr(n),','),',') str,
replace(sys_connect_by_path(chr(n)||chr(n),','),',') str2
from t where level>=2 start with n=65 connect by nocycle n!=prior n )
select str,str2 from t2;

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2012-3-5 21:34 | 只看该作者
高手过招  真的不一样也··

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
26#
发表于 2012-3-5 23:10 | 只看该作者
tree_new_bee 发表于 2012-3-5 20:51
我承认我是个懒人。我很无赖地几乎照抄了野花的代码:

with t as (select rownum+64 n from dual connec ...

哈哈,果然是个无赖,把代码强插到人家的构造用例,非君子所为也!

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
27#
发表于 2012-3-5 23:11 | 只看该作者
xgghxkhuang 发表于 2012-3-4 10:24
select regexp_REPLACE('ABBCBABC','(.)','\1\1') FROM DUAL;
--1        AABBBBCCBBAABBCC
newkid的方法可行呀 ...

小数点匹配任意字符;加上括号的意思是把这个匹配当作一个GROUP并将在后面引用;而\1   \2   \3分别是对第1,2,3组的引用。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
28#
 楼主| 发表于 2012-3-6 00:54 | 只看该作者
tree_new_bee 发表于 2012-3-5 20:51
我承认我是个懒人。我很无赖地几乎照抄了野花的代码:

with t as (select rownum+64 n from dual connec ...

我汗,你不能修改原始数据嘛……

使用道具 举报

回复
论坛徽章:
41
2010广州亚运会纪念徽章:橄榄球
日期:2011-01-11 06:17:26红孩儿
日期:2012-12-19 11:07:13玉石琵琶
日期:2012-12-19 11:07:13九尾狐狸
日期:2012-12-19 11:07:13嫦娥
日期:2012-12-19 11:07:13玉兔
日期:2012-12-19 11:07:13紫蜘蛛
日期:2012-12-19 11:07:13蓝色妖姬
日期:2012-12-19 11:07:13紫蛋头
日期:2013-01-23 09:04:49SQL大赛参与纪念
日期:2013-12-06 14:03:45
29#
发表于 2012-3-6 03:47 | 只看该作者
with t0 as ( select 'abc' str from dual)
select  xmlagg (xmlelement (e, str )).extract ('//text()') str from
  (select substr(str,x.num,1)||substr(str,x.num,1) str from t0,
  xmlTable( '1 to xs:integer($n)' passing length(t0.str) as "n" columns num for ordinality ) x )

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
30#
发表于 2012-3-6 04:44 | 只看该作者
xqmei 发表于 2012-3-6 03:47
with t0 as ( select 'abc' str from dual)
select  xmlagg (xmlelement (e, str )).extract ('//text()') ...

记得我以前就赞叹过你的XML技术,今天再赞一次!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表