Предполагается, что существует ровно одна пара правильно вложенных скобок (и это синтаксис T-SQL):
DECLARE @bla VARCHAR(50)
SET @bla = 'blablablabla(XYZ)asdsdsad'
SELECT SUBSTRING(
@bla,
CHARINDEX('(', @bla) + 1,
CHARINDEX(')', @bla) - CHARINDEX('(', @bla) - 1
)
Урожайность:
'XYZ'
РЕДАКТИРОВАТЬ: Это проверяет различные плохо отформатированные строки и может быть использовано в предложении WHERE (например, WHERE ... <> 'no match'
):
SELECT
CASE
WHEN
/* check for '(' and ')' */
CHARINDEX('(', @bla) > 0 AND CHARINDEX(')', @bla) > CHARINDEX('(', @bla)
/* check for 'bla(bla(XYZ)bla' */
AND CHARINDEX('(', @bla, CHARINDEX('(', @bla) + 1) = 0
/* check for 'bla(XYZ)bla)bla' */
AND CHARINDEX(')', @bla, CHARINDEX(')', @bla) + 1) = 0
THEN SUBSTRING(@bla,
CHARINDEX('(', @bla) + 1,
CHARINDEX(')', @bla) - CHARINDEX('(', @bla) - 1
)
ELSE 'no match'
END