分两次执行,在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)),' ',' ')
用游标吧
用用charindex函数,如果“招聘”或“待遇”在charindex时能找到,则添加,不能找到则不用添加,中间用IF判断就行了。
我感觉你说的意思是每次新增的时候判断,如果新增的数据中有这两个字就顺便也把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 end
INSERT INTO Message(title,tag) VALUES(@title,'招聘')
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
你看是不是这个意思,没看明白你要什么时候使用这个存储过程,是新增的时候,还是已经有了数据,只是要修改已有数据
这个问题你做完后可以考虑用逆向思维去思考一下,
这类问题无非四种情况:1.无招聘,无待遇
2.只有招聘
3.只有待遇
4.有招聘,有待遇
你可以用游标遍历表,逐行去判断;
也可以根据每种情况去遍历表,逐行判断.
二者的执行效率相差确是很大,不过对于sql初学者,还是建议多写写不同的方法.对于其中涉及到的系统函数其实也有很多选择,都可以达到同一结果.