首页 新闻 搜索 专区 学院

求一SQL语句,想了一天也没写出来

0
悬赏园豆:100 [已解决问题] 解决于 2009-09-03 15:53

有表Message如下:

id             title                         tag

1           银行的招聘待遇       

2           银行招聘

 

这个title包含“待遇”,“招聘”时,就把它们update到tag字段中,如果同时有的话,中间用空格隔开。即执行后的表应为:

id             title                      tag

1           银行的招聘待遇      招聘 待遇 

2           银行招聘                   招聘

 

在oracle中这个存储过程应该怎么写?

问题补充: 谢谢 邀月 那个是不是应该这样 charindex('惊人',title)>0 还有就是oracle中要实现这个功能 应该怎么弄呢
yuejianjun的主页 yuejianjun | 初学一级 | 园豆:20
提问于:2009-08-31 17:23
< >
分享
最佳答案
0

分两次执行,在MSSQL中语法:

 

update Message set tag=' 招聘 ' where charindex(title,'招聘')>0
--首尾各一个空格
update Message set tag=tag+' 待遇 ' where charindex(title,'待遇')>0
--去除首尾空格,中间有两个空格的替换为一个空格
update Message set tag=replace(rtrim(ltrim(tag)),' ',' ')
收获园豆:100
邀月 | 高人七级 |园豆:25375 | 2009-08-31 18:07
首先,对不起,没有应时看到你的补充问题 在Oracle中可以用like代替charindex,或者用instr 关于instr的用法 例如select instr(title,'待遇') from Message 就是查找表中title中含有'待遇'的记录 instr(str,chr) ---chr在str中第1次出现的位置 祝顺利!
邀月 | 园豆:25375 (高人七级) | 2009-09-04 13:55
其他回答(4)
0

用游标吧

冰 河 | 园豆:105 (初学一级) | 2009-08-31 17:27
0

用用charindex函数,如果“招聘”或“待遇”在charindex时能找到,则添加,不能找到则不用添加,中间用IF判断就行了。

Rockay.lau | 园豆:105 (初学一级) | 2009-08-31 17:31
0

我感觉你说的意思是每次新增的时候判断,如果新增的数据中有这两个字就顺便也把tag字段给赋上值,对吧?

CREATE PROCEDURE UP_Message_ADD
@title varchar(32) //j传进来的title值

 AS 

IF (charindex('招聘',@title)>0 && charindex('待遇',@title)=0)

  begin
   INSERT INTO Message(title,tag) VALUES(@title,'招聘')

  end

else if (charindex('待遇',@title)>0 && charindex('招聘',@title)=0)

  begin
   INSERT INTO Message(title,tag) VALUES(@title,'招聘')

  end

 

else if (charindex('招聘',@title)>0 && charindex('待遇',@title)>0)

  begin

  INSERT INTO Message(title,tag) VALUES(@title,'招聘 待遇')

  end

else

  begin

  INSERT INTO Message(title) VALUES(@title)

  end

GO

你看是不是这个意思,没看明白你要什么时候使用这个存储过程,是新增的时候,还是已经有了数据,只是要修改已有数据

IS黑山老妖 | 园豆:550 (小虾三级) | 2009-09-01 09:29
0

这个问题你做完后可以考虑用逆向思维去思考一下,

这类问题无非四种情况:1.无招聘,无待遇

                               2.只有招聘

                               3.只有待遇

                               4.有招聘,有待遇

你可以用游标遍历表,逐行去判断;

也可以根据每种情况去遍历表,逐行判断.

二者的执行效率相差确是很大,不过对于sql初学者,还是建议多写写不同的方法.对于其中涉及到的系统函数其实也有很多选择,都可以达到同一结果.

残阳掠影 | 园豆:210 (菜鸟二级) | 2009-09-01 17:23
游标? 这样的功能不需要用.. 不太复杂. 邀月的几句就已经实现了.
支持(0) 反对(0) 不若相忘于江湖 | 园豆:51 (初学一级) | 2009-09-20 12:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册