查看: 9864|回复: 30

[算法]求元音字母在单词中第一次出现的位置.

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2006-5-3 17:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求元音字母['a', 'e', 'i', 'o', 'u']在单词中第一次出现的位置. 没有时,为'0',如:
you(= 2), by (= 0), translate (= 3), i (= 1), Other (= 1)等, 要求用SQL实现!

测试用例:

create table test (word varchar2(30));

insert into test values('A');
insert into test values('quick');
insert into test values('brown');
insert into test values('fox');
insert into test values('jumps');
insert into test values('over');
insert into test values('the');
insert into test values('laze');
insert into test values('dog');
论坛徽章:
112
2008新春纪念徽章
日期:2008-02-13 12:43:03马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-11-03 12:40:39沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31慢羊羊
日期:2015-03-09 16:15:39
2#
发表于 2006-5-3 17:26 | 只看该作者
写个函数不行吗? 非要强人所难,用单个SQL实现吗?

偶知道你这方面强。你这不是让大家没事长白头发吗?

使用道具 举报

回复
论坛徽章:
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
3#
发表于 2006-5-3 18:06 | 只看该作者
最初由 Toms_zhang 发布
[B]写个函数不行吗? 非要强人所难,用单个SQL实现吗?

偶知道你这方面强。你这不是让大家没事长白头发吗?

[/B]


老张你太坏了,居然这样打击人

使用道具 举报

回复
论坛徽章:
112
2008新春纪念徽章
日期:2008-02-13 12:43:03马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-11-03 12:40:39沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31慢羊羊
日期:2015-03-09 16:15:39
4#
发表于 2006-5-3 18:10 | 只看该作者
最初由 lastwinner 发布
[B]

老张你太坏了,居然这样打击人 [/B]


你们两这方面太强。偶嫉妒!

对了,还有一个这方面的高人:hmxxyy

使用道具 举报

回复
论坛徽章:
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
5#
发表于 2006-5-3 18:16 | 只看该作者
zuo兄圈套设得很多啊,又有大小写,还要在没有时显示0
先来个局部的吧
[php]
SQL> SELECT WORD, MIN(POS) MP FROM
  2  (
  3  SELECT T.WORD, VW.VOWEL, INSTR(UPPER(T.WORD),VW.VOWEL) POS FROM
  4  TEST T,
  5  (          SELECT UPPER(SUBSTR(STR,ST+1,EN-ST-1)) VOWEL
  6                     FROM
  7                     (SELECT STR, DECODE(RN,1,0,INSTR(STR,SEP,1,RN-1)) ST ,
  8                             DECODE(INSTR(STR,SEP,1,RN), 0, LENGTH(STR)+1, IN
STR(STR,SEP,1,RN)) EN
  9                             FROM
10                                     (SELECT ROWNUM RN, STR, SEP FROM
11                                             (SELECT 'a/e/i/o/u' STR, '/' SEP
FROM DUAL)
12                                     CONNECT BY ROWNUM<=LENGTH(STR)-LENGTH(RE
PLACE(STR,SEP,''))+1
13                                     )
14                     ) WHERE SUBSTR(STR,ST+1,EN-ST-1) IS NOT NULL
15  ) VW
16  )
17  WHERE POS>0
18  GROUP BY WORD
19  /

WORD                                   MP
------------------------------ ----------
A                                       1
brown                                   3
dog                                     2
fox                                     2
jumps                                   2
laze                                    2
over                                    1
quick                                   2
the                                     3

已选择9行。

已用时间:  00: 00: 00.00

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (GROUP BY)
   2    1     NESTED LOOPS
   3    2       VIEW
   4    3         COUNT (STOPKEY)
   5    4           CONNECT BY (WITH FILTERING)
   6    5             NESTED LOOPS
   7    6               TABLE ACCESS (FULL) OF 'DUAL'
   8    6               TABLE ACCESS (BY USER ROWID) OF 'DUAL'
   9    5             NESTED LOOPS
  10    9               BUFFER (SORT)
  11   10                 CONNECT BY PUMP
  12    9               TABLE ACCESS (FULL) OF 'DUAL'
  13    2       TABLE ACCESS (FULL) OF 'TEST'
.........
[/php]

使用道具 举报

回复
论坛徽章:
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
6#
发表于 2006-5-3 18:17 | 只看该作者
最初由 Toms_zhang 发布
[B]

你们两这方面太强。偶嫉妒!

对了,还有一个这方面的高人:hmxxyy [/B]


jacky也是高高手
俺都跟他们学的

使用道具 举报

回复
论坛徽章:
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
7#
发表于 2006-5-3 18:21 | 只看该作者

Re: [算法]求元音字母在单词中第一次出现的位置.

补充俩数据先

最初由 zuochc 发布
[B]求元音字母['a', 'e', 'i', 'o', 'u']在单词中第一次出现的位置. 没有时,为'0',如:
you(= 2), by (= 0), translate (= 3), i (= 1), Other (= 1)等, 要求用SQL实现!

测试用例:

create table test (word varchar2(30));

insert into test values('A');
insert into test values('quick');
insert into test values('brown');
insert into test values('fox');
insert into test values('jumps');
insert into test values('over');
insert into test values('the');
insert into test values('laze');
insert into test values('dog');

--补充几个数据
insert into test values('by');
insert into test values('my');
[/B]

使用道具 举报

回复
论坛徽章:
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
8#
发表于 2006-5-3 18:28 | 只看该作者
多套一层SQL,搞定
[php]
SQL> SELECT WORD, DECODE(POS, LEN+1, 0, POS) MP FROM
  2  (SELECT WORD, VOWEL, MIN(DECODE(POS, 0, LEN+1, POS)) POS, LEN FROM
  3  (
  4  SELECT T.WORD, VW.VOWEL, INSTR(UPPER(T.WORD),VW.VOWEL) POS, LENGTH(T.WORD)
LEN FROM
  5  TEST T,
  6  (          SELECT UPPER(SUBSTR(STR,ST+1,EN-ST-1)) VOWEL
  7                     FROM
  8                     (SELECT STR, DECODE(RN,1,0,INSTR(STR,SEP,1,RN-1)) ST ,
  9                             DECODE(INSTR(STR,SEP,1,RN), 0, LENGTH(STR)+1, IN
STR(STR,SEP,1,RN)) EN
10                             FROM
11                                     (SELECT ROWNUM RN, STR, SEP FROM
12                                             (SELECT 'a/e/i/o/u' STR, '/' SEP
FROM DUAL)
13                                     CONNECT BY ROWNUM<=LENGTH(STR)-LENGTH(RE
PLACE(STR,SEP,''))+1
14                                     )
15                     ) WHERE SUBSTR(STR,ST+1,EN-ST-1) IS NOT NULL
16  ) VW
17  )
18  GROUP BY WORD
19  )
20  /

WORD                                   MP
------------------------------ ----------
A                                       1
brown                                   3
by                                      0
dog                                     2
fox                                     2
jumps                                   2
laze                                    2
me                                      2
my                                      0
over                                    1
quick                                   2
the                                     3

已选择12行。

已用时间:  00: 00: 00.01

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (GROUP BY)
   2    1     NESTED LOOPS
   3    2       VIEW
   4    3         COUNT (STOPKEY)
   5    4           CONNECT BY (WITH FILTERING)
   6    5             NESTED LOOPS
   7    6               TABLE ACCESS (FULL) OF 'DUAL'
   8    6               TABLE ACCESS (BY USER ROWID) OF 'DUAL'
   9    5             NESTED LOOPS
  10    9               BUFFER (SORT)
  11   10                 CONNECT BY PUMP
  12    9               TABLE ACCESS (FULL) OF 'DUAL'
  13    2       TABLE ACCESS (FULL) OF 'TEST'
...................
[/php]

使用道具 举报

回复
论坛徽章:
7
数据库板块每日发贴之星
日期:2005-03-27 01:01:21数据库板块每日发贴之星
日期:2005-05-08 01:01:23授权会员
日期:2005-11-05 17:10:38会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44喜羊羊
日期:2015-03-04 14:49:392015年新春福章
日期:2015-03-06 11:57:31
9#
发表于 2006-5-3 18:35 | 只看该作者
[PHP]
select word, instr(translate(lower(word), 'aeiou', 'XXXXX'), 'X') pos from test
WORD                                                                POS
------------------------------------------------------------ ----------
A                                                                     1
quick                                                                 2
brown                                                                 3
fox                                                                   2
jumps                                                                 2
over                                                                  1
the                                                                   3
laze                                                                  2
dog                                                                   2
by                                                                    0
my                                                                    0


[/PHP]

使用道具 举报

回复
论坛徽章:
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
10#
发表于 2006-5-3 18:38 | 只看该作者
最初由 hmxxyy 发布
[B][PHP]
select word, instr(translate(lower(word), 'aeiou', 'XXXXX'), 'X') pos from test
WORD                                                                POS
------------------------------------------------------------ ----------
A                                                                     1
quick                                                                 2
brown                                                                 3
fox                                                                   2
jumps                                                                 2
over                                                                  1
the                                                                   3
laze                                                                  2
dog                                                                   2
by                                                                    0
my                                                                    0

........
[/PHP] [/B]



我搞得好复杂

使用道具 举报

回复

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

本版积分规则 发表回复

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