ITPub博客

首页 > 数据库 > Oracle > 一个sql输出乘法口诀

一个sql输出乘法口诀

原创 Oracle 作者:stilllovekk 时间:2016-03-15 16:40:57 0 删除 编辑

忙碌的一天,不多说~~!
itpub上的输出结果,我的写法如下:

SQL> with t as
  2   (select rownum r from dual connect by rownum < 10)
  3  select substr(listagg(s, ' ') within group(order by s),
  4                1,
  5                case
  6                  when a = 1 then
  7                   5
  8                  else
  9                   instr(listagg(s, ' ') within group(order by s), a * a) + 1
 10                end)
 11    from (select t2.r || '*' || t1.r || '=' || t1.r * t2.r s, t1.r a
 12            from t t1, t t2)
 13   group by a
 14  ;
 
SUBSTR(LISTAGG(S,'')WITHINGROU
--------------------------------------------------------------------------------
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
 
9 rows selected

 

csdn上面转成汉字了,按照上面的思路加一些字符串处理,就可以实现
SQL>  with t as
  2       (select rownum r from dual connect by rownum < 10)
  3      select translate(substr(listagg(x,' ')within group (order by X),1, case
  4                      when a = 1 then
  5                       4
  6                       when a*a<10 then  instr(listagg(x, ' ') within group(order by x), a||a) + 3
  7                      else
  8                       instr(listagg(x, ' ') within group(order by x), a||a) + 6
  9                    end),'123456789','一二三四五六七八九') from (
 10      select rpad(b||'得'||case when length(c)=1 then translate(c,'123456789','一二三四五六七八九')
 11      when length(c)=2 then translate(substr(c,1,1),'123456789','一二三四五六七八九')||'十'||
 12         translate(substr(c,2,1),'1234567890','一二三四五六七八九') end,12,' ') x,A from (
 13     select t2.r||t1.r b,T1.R*T2.R c ,t1.r a
 14     from t t1,t t2)
 15     ) group by A ORDER BY A
 16     ;
 
TRANSLATE(SUBSTR(LISTAGG(X,'')
--------------------------------------------------------------------------------
一一得一
一二得二       二二得四
一三得三       二三得六         三三得九
一四得四       二四得八         三四得一十二   四四得一十六
一五得五       二五得一十      三五得一十五   四五得二十      五五得二十五
一六得六       二六得一十二   三六得一十八   四六得二十四   五六得三十      六六得三十六
一七得七       二七得一十四   三七得二十一   四七得二十八   五七得三十五   六七得四十二    七七得四十九
一八得八       二八得一十六   三八得二十四   四八得三十二   五八得四十      六八得四十八    七八得五十六   八八得六十四
一九得九       二九得一十八   三九得二十七   四九得三十六   五九得四十五   六九得五十四    七九得六十三   八九得七十二   九九得八十一

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30123160/viewspace-2057722/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-01-30

  • 博文量
    20
  • 访问量
    29615