Ошибка в запросе Sql при разбиении строки - PullRequest
0 голосов
/ 13 октября 2011

Какую ошибку я делаю в этом SQL-запросе

    Declare @str Varchar(100) = 'asasa,bsasas,csasa,dsczxvvc'
    declare @d varchar(2)=','

SELECT 
     RIGHT(LEFT(@str,Number-1), 
    CHARINDEX(@d,REVERSE(LEFT(@d+@str,Number-1)))) 
FROM 
    master..spt_values
WHERE 
    Type = 'P' AND Number BETWEEN 1 AND  LEN(@str)
    AND SUBSTRING(@str,Number,1) = @d

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

(No column name)
asasa
bsasas
csasa
dsczxvvc

Фактический результат

(No column name)
asasa
bsasas
csasa

Ответы [ 4 ]

3 голосов
/ 13 октября 2011

Ваш AND SUBSTRING(@str, Number, 1) = @d заставляет запятую находиться в конце dsczxvvc ... ее нет.asasa,bsasas,csasa,dsczxvvc, работает.

1 голос
/ 13 октября 2011

Это потому, что в последней строковой части нет разделителя в конце строки. Если добавить следующий код непосредственно перед оператором SELECT, он будет работать

set @str = @str + @d

Существует много разбиенийфункции в Интернете, вы можете использовать одну из них на самом деле.

Разделить строку с помощью функции CLR

Разделить с помощью XML

Функция SQL Server для разделения строк

1 голос
/ 13 октября 2011

добавьте еще одну запятую в конце строки

, вы можете напрямую добавить запятую в строку, как = "asasa, bsasas, csasa, dsczxvvc,"

или

обработать эту вещь на стороне sql.

Объявить @str Varchar (100) set @str = 'asasa, bsasas, csasa, dsczxvvc' объявить @d varchar (2) установить @d= ','

set @str = @str + ','

ВЫБРАТЬ ПРАВО (ВЛЕВО (@ str, Number-1), CHARINDEX (@d,REVERSE (LEFT (@ d + @ str, Number-1)))) FROM master..spt_values ​​WHERE Тип = 'P' И число МЕЖДУ 1 И LEN (@str) И СУБСТРИНГОМ (@ str, Number, 1) = @d

1 голос
/ 13 октября 2011
Declare @str Varchar(100) = 'asasa,bsasas,csasa,dsczxvvc'
select @str += ','

или

DECLARE @str VARCHAR(100) = 'asasa,bsasas,csasa,dsczxvvc';
DECLARE @x XML = CONVERT(XML, '<word>' + REPLACE(@str, ',', '</word> <word>') + '</word>');
SELECT  t.n.value('.','VARCHAR(100)')
FROM    @x.nodes('/word') t(n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...