选择由相同特殊字符分隔的VARCHAR值的一部分

时间:2014-12-02 11:34:27

标签: sql sql-server sql-server-2008-r2

我正在使用SQL Server 2008 R2

这是我拥有的价值:

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

返回2个外部值很容易:

SELECT LEFT(@DBB, CHARINDEX('.', @DBB)-1)
SELECT RIGHT(@DBB, CHARINDEX('.', @DBB)-1)

如何更改脚本以选择值:

1. 'Bg2g3ghh3'
2. 'Chggh3663'
3. 'Dh1jhg23'

使用CHARINDEX只会带回(LEFT)7和(RIGHT)9。

由于

2 个答案:

答案 0 :(得分: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 :(得分: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)