Одинарные кавычки для строк в SQL Server - PullRequest
0 голосов
/ 27 марта 2019
DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';

DECLARE @xml xml
DECLARE @XMT_TEXT AS VARCHAR(200)

SET @XMT_TEXT = REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', ')
SET @xml = cast(('<X>' + @XMT_TEXT + '</X>') as xml)


SELECT N.value('.', 'varchar(50)') as value
FROM @xml.nodes('X') as T(N);

Мой вывод:

1. 'Prudhvi, raj
2. Lalith, Kumar'

Ожидаемый результат:

1. 'Prudhvi, raj'
2. 'Lalith, Kumar'

Ответы [ 4 ]

1 голос
/ 27 марта 2019

Если вы удалите весь код, связанный с XML, и просто оставите

DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';
select REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', ') 

, вы увидите, что вокруг нет кавычек.В результате получается

'Prudhvi, raj</X><X>Lalith, Kumar'

. Это можно исправить, изменив строку замены на ''</X><X>'' с двумя одинарными кавычками до и после тегов:

select REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '''</X><X>'''), '|', ', ')

Результат теперь такой:

'Prudhvi, raj'</X><X>'Lalith, Kumar'

Этот код очень хрупкий.Это зависит от пробела, чтобы разделить ключи, значения и пары.SQL, язык, очень слаб, когда дело доходит до разбора и манипулирования строками.Этот вид анализа должен выполняться за до данных, хранящихся в базе данных.

0 голосов
/ 27 марта 2019

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

DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';

DECLARE @xml xml
DECLARE @XMT_TEXT AS VARCHAR(200)

SET @XMT_TEXT = REPLACE(REPLACE(REPLACE( @rpmProvider , ', ', '|'), ',', '</X><X>'), '|', ', ')

SET @xml = cast(('<X>' + @XMT_TEXT + '</X>') as xml)


SELECT ''''+N.value('.', 'varchar(50)')+'''' as value
FROM @xml.nodes('X') as T(N);
0 голосов
/ 27 марта 2019

Вы можете попробовать следующий запрос,

DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';

DECLARE @xml xml
DECLARE @XMT_TEXT AS VARCHAR(200)

SET @XMT_TEXT = REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '''</X><X>'''), '|', ', ')
SET @xml = cast(('<X>' + @XMT_TEXT + '</X>') as xml)


SELECT N.value('.', 'varchar(50)') as value
FROM @xml.nodes('X') as T(N);
0 голосов
/ 27 марта 2019

попробуйте как ниже

 DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';

DECLARE @xml xml
DECLARE @XMT_TEXT AS VARCHAR(200)

SET @XMT_TEXT = REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', ')
SET @xml = cast(('<X>' + @XMT_TEXT + '</X>') as xml)


SELECT case when left( N.value('.', 'varchar(50)'),1)=''''  then '' else
'''' end + N.value('.', 'varchar(50)')  +
case when right( N.value('.', 'varchar(50)'),1)=''''  then '' else
'''' end as value
FROM @xml.nodes('X') as T(N);



 value
'Prudhvi, raj'
'Lalith, Kumar'

демонстрационная ссылка

...