Sql中分隔字串-->查询-->组合字串
2008-03-18 10:03
429 查看
最近在工作遇到一个数据库查询的问题,大概如下:表Table1中有字段No和Title,每一个No对应一个Title,表Table2中有NoAll字段,NoAll字段的value是No的组合,以逗号隔开,如”111,222,333″,现在要查询Table2,根据NoAll将其中的每一个No所对应的Title查询出来也以逗号分隔显示,如:”oec2003,oec2004,oec2004″。表定义如下:
因为NoAll是用逗号分隔的,所以要查询其中的每一个No就要将NoAll进行拆分,就想到了写一个split函数,如下:
将NoAll拆分了后返回的是一个Table,Table中的每一行是一个No值,要查出每个No对应的Title就要遍历这个Table,首先想到的就是使用游标,在这里我也是将游标写在了一个函数里,如下:
最后执行下面语句出想要的结果,如下:
结果:
CREATE TABLE Table1 ( No VARCHAR(5), Title VARCHAR(20) ) CREATE TABLE Table2 ( NoAll VARCHAR(100) ) INSERT INTO Table1 VALUES('111','oec2003') INSERT INTO Table1 VALUES('222','oec2004') INSERT INTO Table1 VALUES('333','oec2005') INSERT INTO Table2 VALUES('111,222,333')
因为NoAll是用逗号分隔的,所以要查询其中的每一个No就要将NoAll进行拆分,就想到了写一个split函数,如下:
CREATE FUNCTION Split ( @SourceSql varchar(8000), @StrSeprate varchar(10) ) RETURNS @temp TABLE(F1 VARCHAR(100)) AS BEGIN DECLARE @i INT SET @SourceSql=rtrim(ltrim(@SourceSql)) SET @i=charindex(@StrSeprate,@SourceSql) WHILE @i>=1 BEGIN INSERT @temp VALUES(left(@SourceSql,@i-1)) SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) SET @i=charindex(@StrSeprate,@SourceSql) END IF @SourceSql<>'' INSERT @temp VALUES(@SourceSql) RETURN END
将NoAll拆分了后返回的是一个Table,Table中的每一行是一个No值,要查出每个No对应的Title就要遍历这个Table,首先想到的就是使用游标,在这里我也是将游标写在了一个函数里,如下:
CREATE FUNCTION GetTitle(@NoAll NVARCHAR(2000)) RETURNS NVARCHAR(2000) AS BEGIN DECLARE @result VARCHAR(2000) SET @result='' DECLARE getTitle CURSOR FOR SELECT * FROM split(@NoAll,',') OPEN getTitle DECLARE @No SYSNAME FETCH FROM getTitle INTO @No WHILE @@fetch_status=0 BEGIN SET @result=@result+(SELECT Title FROM Table1 WHERE No=@No)+',' FETCH FROM getTitle INTO @No END CLOSE getTitle SET @result= substring(@result,0,len(@result)) DEALLOCATE getTitle RETURN @result END
最后执行下面语句出想要的结果,如下:
SELECT NoAll, dbo.GetTitle(No) AS TitleAll FROM Table2
结果:
相关文章推荐
- Sql中分隔字串-->查询-->组合字串
- Sql中分隔字串-->查询-->组合字串
- SQL根据分隔的字符串,查询并组合查询结果的解决方案(转)
- SQL 必知必会·笔记<12>组合查询
- Linq to SQL 多条件动态组合查询(实战篇)
- C# SqlServer 未定字段未定条件的组合查询写法
- SQL查询int类型字段,前台每三位加逗号分隔输出
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- 多个值以,分隔存储在一个字段精确匹配查询 sql语句
- 常用的SQL语句<三> 联合查询和高级用法
- java swing sql->jtable表格 查询
- SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
- <Learning SQL> O'REILLY_Chap. 3_查询入门
- hibernate 多条件组合查询之sql拼接
- 动态SQL查询,组合查询
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
- SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
- 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,关于触发器SQL语句,完美解决
- 使用逗号分隔含有ID的输入参数(sql 查询)