当前位置: 代码迷 >> Sql Server >> 表字符串搜寻与处理
  详细解决方案

表字符串搜寻与处理

热度:16   发布时间:2016-04-24 09:42:47.0
表字符串搜索与处理
问题详述如下:
现有一个表,部分如下图:


我想从中取出一些数据项,将取出的数据项截取一部分存入另一个表中。

比如现在要取出姓名,搜索“姓名:”,应可以取出上图中的“姓名:张小凡”,然后截取出“张小凡”存入另一个已存在的表中。
但是,这个表中有多处存在“姓名:%”的字段,而且不同列,也不确定在哪几列,是否有办法遍历整个表,以取出所有满足 “姓名:%” 的字段?

本人纯菜鸟,各位大神帮忙看看吧,谢谢了!
------解决思路----------------------
遍历表所有栏位查找记录:
DECLARE @Sql NVARCHAR(max)=''
SELECT  @Sql = @Sql + ' OR ' + name + ' like ''%姓名:张小凡%'''
FROM    sys.columns AS a
WHERE   object_id = OBJECT_ID('表') AND EXISTS(SELECT * FROM sys.types WHERE user_type_id=a.user_type_id AND name IN('varchar','nvarchar'))--加上栏位类型过滤非字符串栏位

SET @Sql=STUFF(@Sql,1,3,'SELECT * FROM 表 WHERE ')
EXEC(@Sql)


------解决思路----------------------
和版主类似,如果以下脚本执行出来的结果是你想要的结果的话,保存到另外一张表就容易多了
DECLARE @SQL NVARCHAR(MAX)
SET @SQL=''
SELECT @SQL=@SQL+' UNION ALL SELECT SUBSTRING([' + [name] + '],4,LEN([' + [name] + ']))[姓名]FROM[表名]WHERE[' + [name] + ']LIKE ''姓名:%'''
FROM SYS.SYSCOLUMNS
WHERE id=OBJECT_ID('表名')
 
SET @SQL=STUFF(@SQL,1,11,'')
--PRINT @SQL
EXEC(@SQL)
  相关解决方案