在與資料庫互動的過程中,我們經常需要把一串id組成的字串當作引數傳給儲存過程獲取資料。很多時候我們希望把這個字串轉成集合以方便用於in操作。 有兩種方式可以方便地把這個以某種符號分隔的id字串轉成臨時表。
方式一:通過charindex和substring。
createfunction
func_splitstring
(@str
nvarchar
(max
),@split
varchar
(10
))returns
@ttable
(c1
varchar
(100
))asbegin
declare
@iint
declare
@sint
set@i
=1
set@s
=1
while(@i
>
0
)begin
set@i
=charindex
(@split
,@str,@s
)if(@i
>
0
)begin
insert
@t(c1)
values
(substring
(@str,@s
,@i-@s
))end
else
begin
insert
@t(c1)
values
(substring
(@str,@s
,len
(@str)-
@s+1
))endset@s=
@i+1
endreturn
end
執行:select * from dbo.func_splitstring('1,2,3,4,5,6', ',')
結果:
方式二:通過xquery(需要sql server 2005以上版本)。
createfunction
func_splitid
(@str
varchar
(max
),@split
varchar
(10
))returns
@ttable
(c1
int)
asbegin
declare
@xxml
set@x
=convert
(xml,''
+replace
(@str
, @split, '
"/>') +
'"/>
')insert
into
@tselect
x.item.value(
'@id[1]',
'int')
from
@x.nodes(
'//items/item')
asx(item)
return
end
執行:select * from dbo.func_splitid('1,2,3,4,5,6', ',')
結果:
其他寫法:
alter
function
[dbo].
[func_split](
@str
nvarchar
(4000
),@separtor
varchar
(10
))
returns
@temp
table([
row]
[int
]identity
(1
,1
) notnull
,value
nvarchar
(4000
))
asbegin
declare
@iint
set@str
=rtrim
(ltrim
(@str
))
set@i
=charindex
(@separtor
,@str
)
while
@i>=
1
begin
insert
@temp
values
(left
(@str,@i
-1
))
set@str
=substring
(@str,@i
+1
,len(
@str)-
@i)
set@i
=charindex
(@separtor
,@str
)
endif
@str
<>
''insert
@temp
values
(@str
)
return
end
**:
oracle用逗號分隔符分割的字段,轉換中文說明
經常碰到某些字段使用逗號等分隔符分割的配置,批量轉換成中文說明比較麻煩。目前想到使用正規表示式匹配,總體思路如下 先由一行用正規表示式提取分割成多行。再用參數列查詢中文名 再合成一行 引數中文說明表 select id,name from tab mb id name 501 很好 502 一般好 ...
sql 中的分隔符
1 通過分隔符可以將其中的內容作為乙個整體的字串進行處理。假設資料庫中有乙個表,名為user info,注意這個名字,user 和 info 中間存在乙個空格。如果直接寫如下查詢,會報錯,可能會提示 user 表不存在或者 user 附近有語法錯誤。select from user info 這時就...
C 讀取以逗號為分隔符的數值
思想 全部讀到乙個字串裡,遇到 就換成空格,然後用這個字串構造乙個stringstream,用 讀到陣列裡。分為istream和ostringstream.1 std string name zeta 2 int age 27 34 ostringstream os 5 os name age 6 ...