34,590
社区成员
发帖
与我相关
我的任务
分享
#测试数据
create table tabA(
id int,
mtp varchar(200)
);
insert into tabA VALUES(100,'1,2,3,4');
create table tabB(
id int,
vl varchar(20),
ct varchar(20)
);
insert into tabB VALUES(99,'1','折');
insert into tabB VALUES(100,'2','戟');
insert into tabB VALUES(101,'3','沉');
insert into tabB VALUES(102,'4','沙');
insert into tabB VALUES(103,'5','莫');
#测试数据结束
SELECT
b.id,
b.mtp,
a.ct
FROM
tabB a
JOIN (
SELECT
t.id,
substring_index(
substring_index(
t.mtp,
',',
b.help_topic_id + 1
),
',',
- 1
) AS mtp
FROM
test_db.tabA t
JOIN mysql.help_topic b ON b.help_topic_id < (
LENGTH(t.mtp) - LENGTH(REPLACE(t.mtp, ',', '')) + 1
)
) b ON a.vl = b.mtp
CREATE FUNCTION dbo.F_Split
(
@SplitString nvarchar(max), --源字符串
@Separator nvarchar(10)=' ' --分隔符号,默认为空格
)
RETURNS @SplitStringsTable TABLE --输出的数据表
(
[id] int identity(1,1),
[value] nvarchar(max)
)
AS
BEGIN
DECLARE @CurrentIndex int;
DECLARE @NextIndex int;
DECLARE @ReturnText nvarchar(max);
SELECT @CurrentIndex=1;
WHILE(@CurrentIndex<=len(@SplitString))
BEGIN
SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
IF(@NextIndex=0 OR @NextIndex IS NULL)
SELECT @NextIndex=len(@SplitString)+1;
SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
SELECT @CurrentIndex=@NextIndex+1;
END
RETURN;
END
GO
--测试数据
if not object_id(N'Tempdb..#a') is null
drop table #a
Go
Create table #a([id] int,[mtp] nvarchar(27))
Insert #a
select 100,N'1,2,3,4'
GO
if not object_id(N'Tempdb..#b') is null
drop table #b
Go
Create table #b([id] int,[vl] int,[ct] nvarchar(21))
Insert #b
select 99,1,N'折' union all
select 100,2,N'戟' union all
select 101,3,N'沉' union all
select 102,4,N'沙' union all
select 103,5,N'莫'
Go
--测试数据结束
SELECT id ,
STUFF(( SELECT ',' + ct
FROM #b
JOIN ( SELECT value
FROM dbo.F_Split(mtp, ',') t
) t1 ON vl = t1.value
FOR
XML PATH('')
), 1, 1, '') AS mtp
FROM #a