在Sql中處理表中字串列中的數字問題

2022-08-11 20:30:16 字數 2184 閱讀 6435

如有表資料,部分記錄(其中列'banid'為主關鍵字)如下:

banid      stylenocolor

2**15-*2-046  特白:11件;中灰:8件;彩藍:8件;鮮黃:8件;鮮橙:8件;

需要取出列'stylenocolor'中的資料,並求和。目前我採取的方法如下:

--

建立記錄板單顏色件數資訊表

ifexists(select

1from sysobjects where id=

object_id('

tb_getsum_banid

') and xtype='u

')drop

table

tb_getsum_banid

gocreate

table

tb_getsum_banid

( banid

varchar(20) primary

keynot

null

, qty

intdefault0)

go--

定義宣告獲取板單件數游標

declare

@banid

varchar(20),@qty

int,@stylenocolor

varchar(2000

)declare cur_getsum_banid cursor

forselect

distinct

banid,stylenocolor

from

b_itemsendfactory_head

where

isnull(banid,'') <>

''--

開啟游標

open

cur_getsum_banid

--使用游標

fetch

next

from cur_getsum_banid into

@banid,@stylenocolor

while

@@fetch_status=0

begin

declare

@xint

set@x=0

set@qty=0

while

@x<

len(@stylenocolor)+

1begin

--取第一次查詢到的數字

set@qty

=@qty

+substring(@stylenocolor

,

patindex('

%[^0-9][0-9]%

',@stylenocolor)+1,

patindex('

%[0-9][^0-9]%

',@stylenocolor)-

patindex('

%[^0-9][0-9]%

', @stylenocolor

))

--取第一次出現數字後的字元

set@stylenocolor

=substring(@stylenocolor

,

patindex('

%[0-9][^0-9]%

',@stylenocolor)+1,

len(@stylenocolor)-

patindex('

%[0-9][^0-9]%

',@stylenocolor)+1)

set@x=@x

+1end--

逐行插入表資料

insert

into

tb_getsum_banid

values(@banid,@qty

)

fetch

next

from cur_getsum_banid into

@banid,@stylenocolor

end--

關閉游標

close

cur_getsum_banid

--釋放游標

deallocate

cur_getsum_banid

go

在kettle使用迴圈來處理表中的資料

有時候,如果kettle事務中源表的資料非常大的時候,一下子把源表中的資料全部讀入記憶體的方式是不可取的。在mysql中,我們可以通過迴圈的方式,使用limit來定量取得一部分資料來處理。即,關鍵的sql是 select from table name limit current value,ste...

SQL中字串處理函式

一 字元轉換函式 1 ascii 返回字元表示式最左端字元的ascii 碼值。在ascii 函式中,純數字的字串可不用 括起來,但含其它字元的字串必須用 括起來使用,否則會出錯。2 char 將ascii 碼轉換為字元。如果沒有輸入0 255 之間的ascii 碼值,char 返回null 3 lo...

SQL 中in傳入字串的處理

路就是把傳入的字串轉換成乙個table,見 declare temptable table f1 nvarchar 20 declare ch nvarchar 20 declare planningcrewids nvarchar 200 set planningcrewids 1,2,3,4,w...