当前位置: 代码迷 >> Sql Server >> 字符串的拆分,该怎么解决
  详细解决方案

字符串的拆分,该怎么解决

热度:78   发布时间:2016-04-24 10:14:34.0
字符串的拆分
求帮助
如下
名字;产品
小李;A/AB/C/A
小张;B/C/A/D
。。。
想把产品拆开,并按从左到右的顺序编号。

名字;产品
小李;1_A
小李; 2_AB
小李; 3_C
小李; 4_A
。。。

------解决方案--------------------
----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2014-04-08 17:41:18
-- Verstion:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
-- Jul  9 2008 14:43:34 
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go 
create table [tb]([名字] varchar(4),[产品] varchar(8))
insert [tb]
select '小李','A/AB/C/A' union all
select '小张','B/C/A/D'
--------------开始查询--------------------------
SELECT 
    名字,LTRIM(ROW_NUMBER()OVER(PARTITION BY 名字 ORDER BY GETDATE()))+'_'+产品 AS 产品
FROM 
(
Select
    a.名字,substring(a.产品,b.number,charindex('/',a.产品+'/',b.number)-b.number) AS 产品
from 
    Tb a join master..spt_values  b 
    ON B.type='p' AND B.number BETWEEN 1 AND LEN(A.产品)
where
     substring('/'+a.产品,b.number,1)='/')t
----------------结果----------------------------
/* 名字   产品
---- ---------------------------------
小李   1_A
小李   2_AB
小李   3_C
小李   4_A
小张   1_B
小张   2_C
小张   3_A
小张   4_D

(8 行受影响)

*/

------解决方案--------------------
postgresql建议到postgresql专区问,这里是sqlserver的地方,语法不同
  相关解决方案