获得括号之间的最后匹配

时间:2017-06-16 08:41:41

标签: sql sql-server tsql

Company 1 [CRM] - Hong Kong - [10003086] (57464)
Company 2  [SHP] Shanghai - [10003086] (12532)

我正在尝试从字符串中提取括号中的第二个出现。我尝试了什么:

SELECT
SUBSTRING(myid,CHARINDEX('(',myid)+1,(CHARINDEX(')',myid)-CHARINDEX('(',myid))-1) AS ID
FROM dbo.CRM

对于第一条记录,它会返回我想要的数字' 10003086'。对于第二条记录,它返回' [SHP]'。如何确保查询始终返回最后找到的结果?

1 个答案:

答案 0 :(得分:1)

试试这种方式

DECLARE @str     VARCHAR(100)= 'Company 1 [CRM] - Hong Kong - [10003086] (57464)',
        @fst_pos INT,
        @lst_pos INT

SELECT @fst_pos = Charindex('[', @str),
       @lst_pos = Charindex(']', @str)

SELECT Substring(@str, Charindex('[', @str, @fst_pos+1) + 1, Charindex(']', @str, @lst_pos + 1) - Charindex('[', @str, @fst_pos + 1) - 1)