这个查询该怎么写

有你_才有梦想 2017-04-23 08:53:06
各位大神,我的数据集是这样的
ID Name
01 [人工]:30,[物料]:100,[单价]:60
02 [物料]:90
03 [人工]:100,[物料]:120
04 [单价]:100,[物料]:200

希望能有一条语句实现 查询所有[]中的内容,并不显示重复内容,得到类似下面的结果集
人工
物料
单价

只有39分了,分不多,不好意思了
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
太牛了,谢谢,大神
二月十六 2017-04-23
  • 打赏
  • 举报
回复
创建分隔函数:
CREATE FUNCTION dbo.f_splitSTR
(
@s VARCHAR(8000) , --待分拆的字符串
@split VARCHAR(10) --数据分隔符
)
RETURNS @re TABLE ( col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT;
SET @splitlen = LEN(@split + 'a') - 2;
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( LEFT(@s, CHARINDEX(@split, @s) - 1) );
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '');
END;
INSERT @re
VALUES ( @s );
RETURN;
END;

GO



--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] nvarchar(22),[Name] nvarchar(44))
Insert #T
select N'01',N'[人工]:30,[物料]:100,[单价]:60' union all
select N'02',N'[物料]:90' union all
select N'03',N'[人工]:100,[物料]:120' union all
select N'04',N'[单价]:100,[物料]:200'
Go
--测试数据结束
SELECT DISTINCT
SUBSTRING(t.col, CHARINDEX('[', t.col) + 1,
CHARINDEX(']', t.col) - CHARINDEX('[', t.col) - 1) AS name
FROM #T
CROSS APPLY ( SELECT col
FROM dbo.f_splitSTR(Name, ',')
) t;



22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧