2015-01-15 4 views
1

мне нужно преобразовать следующие значения из переменной:Разделенный запятыми список строки SQL

1234,1234,12345,12346,1344,4564 

к этому:

'1234','1234','12345','12346','1344','4564' 

с помощью функции SQL.

Я попытался:

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

Ugh, why? Вы собираетесь положить '@ listStr' в нечто вроде' WHERE column IN ('+ @listStr +') '? Вы действительно должны смотреть в табличные параметры или, если вы находитесь в <2008, разделяете строки. –

ответ

2

Попробуйте это:

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

Проверить это SQL FIDDLE DEMO

OUTPUT

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

EDIT

Использование Определяемые пользователем функции:

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', ',', "\',\'"), "\'") 
Смежные вопросы