我有这些字符串:
XXXXX - XXXX - XXX - XXXX
XXXX - XXX - XXXXXXX
我需要在' - '
的第二个实例之后获取值所以在上面的场景中,我会得到:
XXX - XXXX
XXXXXXX
我该如何在SQL中执行此操作?
答案 0 :(得分:3)
SUBSTRING
和CHARINDEX
是您的朋友。
试试这个:
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 强>