从 SQL Server 表中的 varchar 列获取子字符串

4

我有一个名为“Name”的列,在该列中有值

Name
001 BASI Distributor (EXAM)
002 BASI Supplier (EXAM2)
MASI DISTRIBUTOR (EXAM002)
MASI SUPPLIER (EXAM003)
EXAM_ND Distributor Success System Test (EXAM_ND)
EXAM_SS Supplier Success System Test (EXAM_SS)

现在我想从整个字符串中分离出()内的值。 我已经尝试使用SUBSTRING(Name,22,4),但这只适用于单个值。我希望能够使用一些独特的解决方案来获得结果。

4个回答

5
SELECT  SUBSTRING(Name,
        CHARINDEX('(', Name) + 1,
        CHARINDEX(')', Name) - CHARINDEX('(', Name) - 1)

3

另一个选项:

SELECT *, REPLACE(SUBSTRING(Name, CHARINDEX('(', Name) + 1, LEN(Name)), ')', '')
FROM dbo.test136

这样做可以省去一次CHARINDEX调用(搜索闭合的)),前提是您的Name值从未在括号部分之后包含其他内容。 如果有,请使用其他建议。

2
谢谢同志。可惜没有足够的时间给@techdo的回答点赞。 - Devart

3

试试这个 -

DECLARE @temp TABLE (st NVARCHAR(50))

INSERT INTO @temp (st)
VALUES 
     ('001 BASI Distributor (EXAM)'),
     ('002 BASI Supplier (EXAM2)'),
     ('MASI DISTRIBUTOR (EXAM002)'),
     ('MASI SUPPLIER (EXAM003)'),
     ('EXAM_ND Distributor Success System Test (EXAM_ND)'),
     ('EXAM_SS Supplier Success System Test (EXAM_SS)')

SELECT SUBSTRING(
     st, 
     CHARINDEX('(', st) + 1, 
     CHARINDEX(')', st) - CHARINDEX('(', st) - 1
)
FROM @temp

输出 -

-------------
EXAM
EXAM2
EXAM002
EXAM003
EXAM_ND
EXAM_SS

-1
请尝试以下操作:
SELECT 
    REPLACE(SUBSTRING(Name, PATINDEX('%(%', Name)+1, LEN(Name)), ')', '')
FROM 
    YourTable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接