这假定有恰好1双正确的嵌套括号(和是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
+1表示嵌套括号部分的条件。 – Learning 2009-04-16 16:02:05
其实,如果数据没有括号,会不会出错? – Learning 2009-04-16 16:10:54
这就是为什么我包含“假定一对”部分。:-) – Tomalak 2009-04-16 16:14:53