2015-01-15 43 views
1

我需要將以下值從一個變量轉換:逗號分隔列表的字符串SQL

1234,1234,12345,12346,1344,4564 

了這一點。

我曾嘗試:

DECLARE @VAL AS VARCHAR(MAX) 
SELECT @VAL = '1234,1234,12345,12346,1344,4564' 

DECLARE @listStr VARCHAR(MAX) 
SELECT @listStr = COALESCE(@listStr+',' ,'') + @VAL 
SELECT @listStr AS 'List' 
GO 

,但我得到:

1234,1234,12345,12346,1344,4564 
+0

'select''''+ replace(@yourvariable,',',''',''')+''''' –

+0

COALESCE從其參數中返回第一個非空值。這與字符串操作無關。此外,請勿使用'varchar(max)',它旨在用作BLOB,而不是作爲方便的字符串,而不是大小爲 –

+0

呃,爲什麼?那麼你會把'@ listStr'放入類似'WHERE column IN('+ @listStr +')'的東西嗎?你真的應該看看錶值參數,或者如果你在<2008年,分裂字符串。 –

回答

2

試試這個:

SELECT '''' + REPLACE('1234,1234,12345,12346,1344,4564', ',', ''',''') + ''''; 

入住這SQL FIDDLE DEMO

輸出

|         COLUMN_0 | 
|---------------------------------------------| 
| '1234','1234','12345','12346','1344','4564' | 

編輯

使用用戶定義的函數:

CREATE FUNCTION dbo.ufnReplace(@Val VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    SELECT @Val = '''' + REPLACE(@Val, ',', ''',''') + ''''; 
    RETURN @Val; 
END; 

SELECT dbo.ufnReplace('1234,1234,12345,12346,1344,4564'); 
+0

需要是一個函數.. – PriceCheaperton

+0

什麼是UDF? Scalar_Function – PriceCheaperton

1
DECLARE @VAL AS VARCHAR(MAX) 
SELECT @VAL = '1234,1234,12345,12346,1344,4564' 
SELECT '''' + REPLACE(@VAL,',',''',''') + '''' 
0

使用REPLACE()CONCAT()

select concat("\'", replace('1234,1234,12345,12346,1344,4564', ',', "\',\'"), "\'")