SQL Like中的逗號分隔符

2021-09-09 00:18:14 字數 3123 閱讀 8801

在與資料庫互動的過程中,我們經常需要把一串id組成的字串當作引數傳給儲存過程獲取資料。很多時候我們希望把這個字串轉成集合以方便用於in操作。 有兩種方式可以方便地把這個以某種符號分隔的id字串轉成臨時表。

方式一:通過charindex和substring。 

create

function

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以上版本)。

create

function

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 ...