2014-12-02 28 views
-1

我使用SQL Server 2008 R2的通過相同的特殊字符分隔VARCHAR值選擇部分

這是我的價值:

DECLARE @DBB varchar(200) = 'A2gg3h.B2g3ghh3.Cggh3663.D1jhg23.Eh2hjj2g' 

返還2個外在價值是很容易:

1. 'Bg2g3ghh3' 
2. 'Chggh3663' 
3. 'Dh1jhg23' 
SELECT LEFT(@DBB, CHARINDEX('.', @DBB)-1) 
SELECT RIGHT(@DBB, CHARINDEX('.', @DBB)-1) 

我怎麼會以選擇的值更改腳本

使用CHARINDEX只會帶回(左)和7(右)9

感謝

+1

http://stackoverflow.com/questions/2647/how-do-i-split-a-string-so-i-can-access-item- x – CodingDefined 2014-12-02 11:36:49

+0

這是一個很多問題的重複,沒有一個(在我看來)會給你一個比閱讀以下三篇文章更好的答案: [以正確的方式分割字符串 - 或下一個最好的方式](http:/ /sqlperformance.com/2012/07/t-sql-queries/split-strings), [Splitting Strings:A Follow-up](http://sqlperformance.com/2012/08/t-sql-queries/splitting - 跟蹤)和 [Split ting字符串:現在用更少的T-SQL](http://sqlperformance.com/2012/08/t-sql-queries/splitting-strings-now-with-less-t-sql) – GarethD 2014-12-02 11:47:55

回答

1

使用此。

DECLARE @param NVARCHAR(MAX) 
SET @param = 'A2gg3h.B2g3ghh3.Cggh3663.D1jhg23.Eh2hjj2g' 

SELECT 
    Split.a.value('.', 'VARCHAR(100)') AS CVS 
FROM 
(
    SELECT CAST ('<M>' + REPLACE(@param, '.', '</M><M>') + '</M>' AS XML) AS CVS 
) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a) 
1

試試這個:

DECLARE @string VARCHAR(MAX), 
@Split CHAR(1), 
@X xml 
SELECT @string = 'A2gg3h.B2g3ghh3.Cggh3663.D1jhg23.Eh2hjj2g', 
@Split = '.' 
SELECT @X = CONVERT(xml,'<root><s>' + REPLACE(@string,@Split,'</s><s>') + '</s></root>') 
SELECT T.c.value('.','varchar(max)') AS Result 
FROM @X.nodes('/root/s') T(c) 
+0

使用XML擴展來分割字符串只能在100%確定輸入將從不**包含'>'或'<',如果它確實會使方法失敗 – GarethD 2014-12-02 11:52:36