拆分欄位中的字串

2022-03-21 08:12:25 字數 2725 閱讀 9481

需求: 現有一表,如圖所示:

要求,將表中的資料按如下格式顯示出來:

/*結果

1 張三 a

2 張三 b

3 張三 c

4 張三 d

5 張三 e

2 李四 a

2 李四 b

2 李四 c

*/這個問題是在csdn上找到的,當時,也很鬱悶,不過其中有乙個牛人用了四種方法寫出來了,所以做個筆記。

create

table tb(id int,[

name

]varchar(60),value varchar(30

))insert

into tb values(1,'

張三','

a,b,c,d,e')

insert

into tb values(2,'

李四','

a,b,c')

go--

1.使用臨時表

select

top100 id =

identity(int, 1, 1) into #tb from

syscolumns a, syscolumns b

select b.id,a.[

name

], [

value]=

substring(a.[

value

], b.id, charindex('

,', a.[

value]+

',', b.id) -

b.id)

from[tb

]a, #tb b

where

substring(','

+ a.[

value

], b.id, 1) =',

'groupby[

value

],[name

],b.id

--2.不使用臨時表

select a.id ,a.[

name

], value =

substring(a.value , b.number , charindex('

,' , a.value +',

' , b.number) - b.number

) from tb a join

master..spt_values b

on b.type='p

'and b.number

between

1and

len(a.value)

where

substring(','

+ a.value , b.number , 1) =',

'--3.使用xml

select a.id,a.[

name

], b.value from

select id,[

name],

[value]=

convert(xml,''+

replace([

value

], '

,', '

') +''

)

from

tb) a

outer

(

select

[value

]= n.v.value('

.', '

varchar(100)')

from a.[

value

].nodes('

/root/v

') n(v)

) b--

4.使用cet

;with tt as

(

select id,[

name],

[value]=

cast(left([

value

],charindex('

,',[

value]+

',')-1) as

nvarchar(100

)), split

=cast(stuff([

value]+

',',1,charindex('

,',[

value]+

','),'') as

nvarchar(100

))

from

tbunion

allselect id,[

name],

[value]=

cast(left(split,charindex('

,',split)-

1) as

nvarchar(100

)), split

=cast(stuff(split,1,charindex('

,',split),'') as

nvarchar(100

))

from tt where split>'')

select id,[

name

],[value

]from tt order

by id option (maxrecursion 0)

如有好的方法,請大牛繼續貼留到恢復貼上。

拆分字串

拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...

拆分字串

本函式可以將 目標字串 以 指定字串 進行拆分,並通過表結構返回結果。如下 create or replace type str split is table of varchar2 4000 create or replace function splitstr p string in varch...

拆分字串

拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...