2011-10-13 30 views
0

我在這個SQL查詢錯誤SQL查詢,同時分割字符串

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

SELECT 
    RIGHT(LEFT(@str,Number-1), 
    CHARINDEX(@d,REVERSE(LEFT(@[email protected],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 

回答

3

AND SUBSTRING(@str, Number, 1) = @d做什麼錯誤是forci ng逗號在dsczxvvc的末尾......沒有一個。 asasa,bsasas,csasa,dsczxvvc,的作品。

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) 
1

在串

可以直接象= 串中添加逗號 「asasa,bsasas,csasa,dsczxvvc,」的末尾添加一個逗號

在sql方面處理這件事。

申報@str VARCHAR(100) 組@str = 'asasa,bsasas,csasa,dsczxvvc' 聲明@d VARCHAR(2) 組@d = ''

集@str = @str + ''

SELECT RIGHT(LEFT(@ STR,編號-1), CHARINDEX(@ d,REVERSE(LEFT(@ d + @ STR,編號-1)))) FROM master..spt_values WHERE Type ='P'與數字1和LEN(@str) AND SUBSTRING(@ str,Number,1)= @d