分割字符串时在Sql查询中出错

时间:2011-10-13 08:16:09

标签: sql-server tsql

我在这个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 个答案:

答案 0 :(得分:3)

您的AND SUBSTRING(@str, Number, 1) = @d强制逗号位于dsczxvvc的末尾...没有。 asasa,bsasas,csasa,dsczxvvc,有效。

答案 1 :(得分:1)

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)

答案 2 :(得分:1)

在字符串

的末尾再添加一个逗号

你可以直接在字符串中添加逗号,如= “asasa,bsasas,csasa,dsczxvvc,”

在sql端处理这个东西。

声明@str Varchar(100)  设置@str ='asasa,bsasas,csasa,dsczxvvc'     声明@d varchar(2)     设置@d =','

设置@str = @str +','

选择      RIGHT(LEFT(@海峡,1列),     CHARINDEX(@ d,REVERSE(LEFT(@ d + @ STR,编号-1)))) 从     master..spt_values 哪里     Type ='P'和数字BETWEEN 1 AND LEN(@str)     AND SUBSTRING(@ str,Number,1)= @d

答案 3 :(得分:1)

这是因为最后一个字符串部分在字符串末尾没有分隔符 如果在SELECT语句之前添加以下代码,它将起作用

set @str = @str + @d

网上有很多分割功能,你可以实际使用其中一种功能。

Split string using CLR function

Split using XML

SQL Server split string function