因此,你需要抓住一个字符串末尾的最后一组开盘价和收盘括号之间到底是吧?
首先,找到从字符串的末尾的第一开口支架。我会使用CHARINDEX,因为你只是在寻找一个字符;你不需要使用模式匹配。
SELECT LEN(ProgrammeName) + 1 - CHARINDEX('(', REVERSE(ProgrammeName)) FROM Table
然后,从字符串的末尾找到第一闭合支架:
SELECT LEN(ProgrammeName) + 1 - CHARINDEX(')', REVERSE(ProgrammeName)) FROM Table
然后,把那些在一起。要使用SUBSTRING,你需要的第一个字符的位置,那么你想要的字符串的长度,所以你需要第一个结果(的“(”的位置),然后将第二个结果减去第一次结果,得到括号内位的长度,作为一个起点:
SELECT (LEN(ProgrammeName) + 1 - CHARINDEX(')', REVERSE(ProgrammeName))) - (LEN(ProgrammeName) + 1 - CHARINDEX('(', REVERSE(ProgrammeName))) FROM Table
你也需要做摆弄提取括号之间的部分,只留下括号的一点那是在评论解释了这个最后的例子。 ,最后的表达应该做你想要的工作:
SELECT
-- Position of first bracket
LEN(ProgrammeName) + 1 - CHARINDEX('(', REVERSE(ProgrammeName)),
-- Position of second bracket
LEN(ProgrammeName) + 1 - CHARINDEX(')', REVERSE(ProgrammeName)),
-- Position of second bracket minus position of first bracket gives length
(LEN(ProgrammeName) + 1 - CHARINDEX(')', REVERSE(ProgrammeName))) - (LEN(ProgrammeName) + 1 - CHARINDEX('(', REVERSE(ProgrammeName))),
-- If we want to extract the bit between the brackets, we need to start from the bracket position
-- plus one character, and knock one off the length, to avoid grabbing the closing bracket.
SUBSTRING(ProgrammeName, 1 + LEN(ProgrammeName) + 1 - CHARINDEX('(', REVERSE(ProgrammeName)), (LEN(ProgrammeName) + 1 - CHARINDEX(')', REVERSE(ProgrammeName))) - (LEN(ProgrammeName) + 1 - CHARINDEX('(', REVERSE(ProgrammeName))) - 1)
FROM
Table
我已经打破了我的答案,所以你可以看到我如何处理这些问题 - 一次只做一点,随着时间的推移检查结果,并且更容易让你头脑发热。
谢谢!它有助于! – marilyn 2010-07-22 07:08:29