我已經簡單的數據來像這樣:sql-server-2005:如何執行分隔管道分隔字符串變量?
declare @string varchar(500) = "val1|val2|val3"
我怎麼能拆了這一點,爲的CTE或相似的,所以我能用戶它在以後的查詢的內容:
select col1 from table where col2 = @valFromCTE
我已經簡單的數據來像這樣:sql-server-2005:如何執行分隔管道分隔字符串變量?
declare @string varchar(500) = "val1|val2|val3"
我怎麼能拆了這一點,爲的CTE或相似的,所以我能用戶它在以後的查詢的內容:
select col1 from table where col2 = @valFromCTE
這是一個有用和簡單的方式來查詢分隔字符串就好像它是一個表。
來自 http://www.mindsdoor.net/SQLTsql/ParseCSVString.html
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fn_ParseCSVString]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fn_ParseCSVString]
GO
create function fn_ParseCSVString
(
@CSVString varchar(8000) ,
@Delimiter varchar(10)
)
returns @tbl table (s varchar(1000))
as
/*
select * from dbo.fn_ParseCSVString ('qwe,c,rew,c,wer', ',c,')
*/
begin
declare @i int ,
@j int
select @i = 1
while @i <= len(@CSVString)
begin
select @j = charindex(@Delimiter, @CSVString, @i)
if @j = 0
begin
select @j = len(@CSVString) + 1
end
insert @tbl select substring(@CSVString, @i, @j - @i)
select @i = @j + len(@Delimiter)
end
return
end
GO
只是爲了迂腐,而在小字符串它可能是不相關的,我會意識到循環方法對大字符串的性能影響。雖然我爲'INT'值做了這個,但我比較了去年各種拆分方法的性能,並且應該檢查結果:http://sqlblog.com/blogs/aaron_bertrand/archive/2010/07/07/splitting-a -list-的-整數-另一個-roundup.aspx –
使用分割功能。你可以在我的答案在這裏看到一個例子:http://stackoverflow.com/questions/7274514/sql-query-to-match-keywords –
好的,我有一點麻煩,因爲我的原始輸入字符串通過 – Cavide
對,我正在看數字表,這是我絆倒 – Cavide