34,696
社区成员
-- 向表格中插入一些示例数据 软件采集到的 是 xuhao和neirong 这2列 ,weixin和beizhu是自己加的 是人工翻阅时 看 neirong里有没有微信号码 手工填写
INSERT INTO TABLE (xuhao , neirong)
VALUES (1, '优化后微信:abc'),
(2, '最近西班牙'),
(3, '印度尼西亚VX:abc''),
(4, '香港weixin:efg'')
;
----对上面的内容进行整理
xuhao 1 看到微信 abc 复制到 xuhao 1 weixin那一列;
xuhao 2里没有微信 列 微信就是空;
假设 xuhao 3那行没看到(假如表很多很多行 人工只看了很少一部分) ;
xuhao 4 看到微信 efg 复制到 xuhao 4 weixin 那一列
我用游标想实现:
1 把列weixin所有值放入游标(上面的是abc,efg),然后用这些值对neirong逐一模糊查询,如果匹配到,就把该weixin值放到该行的列weixin上,比如上面模糊搜索时发现了 xuhao3 里面abc 就把abc放到xuhao3 这行的列weixin;
2.后继续向这个表插入数据:
(5, '中邮渠道 V:lmn'') ,
(6, '中邮渠道 V:abc''),
先执行游标发现了 xuhao6 里面abc 就把abc放到xuhao6 这行的列weixin, 然后我们对weixin为空的数据进行查看,会看到xuhao 5里的lmn,于是把lmn复制到 xuhao 5 weixin 那一列 这时候再执行游标,weixin所有值就是 abc,efg,lmn了 然后用这3个值对neirong逐一模糊查询。。。。
不断重复这个过程,这个游标一直起作用。
--这不用你整理好的表,跟你需要更新的表关联匹配更新就好了呀
UPDATE a SET weixin = b.rst
FROM #t a INNER JOIN 你整理好的微信表 b ON a.neirong LIKE '%' +b.rst +'%'
CREATE TABLE #t
(
xuhao VARCHAR(100),
neirong VARCHAR(100),
weixin VARCHAR(100)
)
INSERT INTO #t (xuhao , neirong)
VALUES (1, '优化后微信:abc'),
(2, '最近西班牙'),
(3, '印度尼西亚VX:abc'),
(4, '香港weixin:efg')
--匹配内容包含微信或weixin的数据
--然后截取从微信/weixin位置后+1开始到最后的内容(这个截取位置从哪开始到哪结束,要根据你真实内容分析来决定)
--然后用上面截取到的值跟原来的内容匹配,能匹配上的就更新
UPDATE a SET weixin = b.rst
FROM #t a INNER JOIN
(
SELECT
CASE
WHEN neirong LIKE '%微信%' THEN SUBSTRING(neirong, 3+ CHARINDEX('微信',neirong),1000)
WHEN neirong LIKE '%weixin%' THEN SUBSTRING(neirong, 7+ CHARINDEX('weixin',neirong),1000)
END AS rst
FROM #t
WHERE neirong LIKE '%微信%' OR neirong LIKE '%weixin%'
) b ON a.neirong LIKE '%' +b.rst +'%'
--查看结果
SELECT * FROM #t
DROP TABLE #t
--不是一句SQL可以搞定的吗,为什么要游标?
UPDATE tiezi
SET beizhu = weixin
WHERE neirong like '%'+weixin+'%'
UPDATE tiezi
SET beizhu = @weixin
WHERE neirong like '%'+@weixin+'%'
我改了下:
UPDATE tiezi
SET beizhu = @weixin
WHERE weixin=@weixin and neirong like '%'+@weixin+'%' 可以更新了 感谢@河狸吗
要看@weixin是否为 ‘’,如果你beizhu也默认为 ‘’,这样更新当然看不出来有没有更新呀