SQL2005 列遍歷 去不規則空格 拆分擷取

2021-09-22 07:17:10 字數 4152 閱讀 9821

create

table

#temp

(id 

intidentity(1

,1),zise 

nvarchar

(200))

declare

@zise

nvarchar

(200

)declare

@nint

declare

@rows

intselect@n=

1insert

#temp

(zise) 

select

prosize  

from

ttselect

@rows

=@@rowcount

while

@n<=

@rows

begin

select

@zise

=prosize 

from

ttwhere

prosize=(

select

zise 

from

#temp

where

id =@n)

--對欄位裡面不規則空格進行化為乙個空格

set@zise

=ltrim

(@zise

)set

@zise

=rtrim

(@zise

)while

charindex('

',@zise

)<>

0begin

set@zise

=replace

(@zise,'

',''

)end

--insert into #temp(zise) values (@zise) --原臨時表追加插入

update

#temp

setzise

=@zise

whereid=

@n--

更新--

print(@zise)  

select@n=

@n+1end

select

*from

#temp

drop

table

#temp

/*結果:

44    1975*990*110            1740*1010*100

45    1975*990*110            1740*1010*100

46    1975*990*110            1740*1010*100

47    1010*920*190           1940*1010*110

48    1010*920*190           1940*1010*110

****

變成:27    1010*920*190 1940*1010*110

28    1010*920*190 1940*1010*110

29    1010*920*190 1940*1010*110

30    1010*920*190 1940*1010*110

*//*

字段(size):

1    aa

2    bb cc

*/--

可以通過 因為 bb cc 之間有空格

select

left

(zise,

charindex('

',zise)-1

) as

a from

#temp

where

id =

2select

left

(zise,

charindex('

',zise)-1

) as

a from

#temp

--傳遞到 substring 函式的長度引數無效。因為有些行沒有空格 如第一行

--解決:

--取第乙個

select

left

(zise,

charindex('

',zise+'

')-1

) as

a from

#temp

--取第二個 中間不規則空格

select

ltrim

(rtrim

(substring

(zise,

charindex('

',zise+'

'),len(zise+'

')-charindex('

',zise)+1

))) 

asa 

from

#temp

select

substring

(zise,

charindex('

',zise+'

'),len(zise+'

')-charindex('

',zise)+1

) as

a from

#temp

--臨時表 + while迴圈  對列進行遍歷

create

table

#temp

(id 

intidentity(1

,1),zise 

nvarchar(50

))declare

@zise

nvarchar(50

)declare

@nint

declare

@rows

intselect@n=

1insert

#temp

(zise) 

select

prosize  

from

ttselect

@rows

=@@rowcount

while

@n<=

@rows

begin

select

@zise

=prosize 

from

ttwhere

prosize=(

select

zise 

from

#temp

where

id =@n)

print

(@zise

) select@n=

@n+1end

drop

table

#temp

/*結果:

(169 行受影響)

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

*/--

游標(cursor) + while迴圈 對列進行遍歷

declare

@size

nvarchar(50

)declare

pcurr 

cursor

forselect

prosize  

from

ttopen

pcurr

fetch

next

from

pcurr 

into

@size

while

(@@fetch_status=0

)begin

print

(@size

)fetch

next

from

pcurr 

into

@size

endclose

pcurr

deallocate

pcurr 

/*結果:

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

1940*1050*135

*/

SQL2005實現行轉成列

參考 愛新覺羅.毓華 時間 值 2009 01 01 90 2009 01 02 99 2009 02 01 95 得到如下結果 mycol 200901 200902 mycol 189 95 create table mytb time datetime,value float insert i...

SQL2005 行轉列 列轉行

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。引用msdn 可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。...

sql2005 行列轉換的例子

select categoryproductid,0 as p0,1 as p1,2 as p2,3 as p3,4 as p4,5 as p5,6 as p6,7 as p7,8 as p8,9 as p9 from select categoryproductid,sequence,proper...