我在这个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
答案 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
网上有很多分割功能,你可以实际使用其中一种功能。