如何在SQL Server中的第二个字符实例后获取值?

时间:2017-06-07 18:14:21

标签: sql-server

我有这些字符串:

XXXXX - XXXX - XXX - XXXX
XXXX - XXX - XXXXXXX

我需要在' - '

的第二个实例之后获取值

所以在上面的场景中,我会得到:

XXX - XXXX
XXXXXXX

我该如何在SQL中执行此操作?

2 个答案:

答案 0 :(得分:3)

SUBSTRINGCHARINDEX是您的朋友。 试试这个:

DECLARE @str VARCHAR(MAX) = 'XXXXX - XXXX - XXX - XXXX'

SELECT SUBSTRING( SUBSTRING( @str, CHARINDEX( '-', @str ) + 1, LEN( @str ) ), CHARINDEX( '-', @str ) + 1, LEN( @str ) )

返回XXX - XXXX

答案 1 :(得分:0)

这是一个基于XML / XQuery的解决方案:

SELECT *, y.ColB.query('root/i[position() gt 2]').value('.', 'NVARCHAR(100)') AS SomethingVeryImportant
FROM ( 
    SELECT 'XXXXX - XXXX - XXX - XXXX'
    UNION ALL
    SELECT 'XXXX - XXX - XXXXXXX'
) AS x(ColA)
CROSS APPLY ( SELECT CONVERT(XML, N'<root><i>' + REPLACE(x.ColA, N'-', N'-</i><i>') + N'</i></root>') ) AS y(ColB)

<强> Demo