从 string-SQL 中提取特定术语

Pulling specific terms from a string-SQL

我有一列全名,例如:

Fullname
-----------------------
Joel (MD),Garris
Yong (MD),Park
Kristen (DO),Kenny
Jr, Jack (MD),Freimann
FirstName (title), LastName 

我真正想要的只是名字。我试过跟随但无法得到结果。

我尝试使用 CHARINDEX 和 SUBSTRING,但仍然找不到任何结果:

Replace(SUBSTRING(@aa,1,(CHARINDEX('(',@aa))),',','')

尝试单独提取标题,然后尝试将其替换为空:

Replace(FullName,SUBSTRING(Fullname, CHARINDEX('(',Fullname,0),CHARINDEX(')',Fullname,CHARINDEX('(',Fullname,0))),'')

谁能告诉我这是怎么回事?

我不确定你为什么需要 replace,但这是 substring 的用法,它只会让你得到名字:

创建并填充示例 table(在您以后的问题中省去这一步)

DECLARE @T As TABLE
(
    Fullname varchar(30)
)

INSERT INTO @T VALUES
('Joel (MD),Garris'),
('Yong (MD),Park'),
('Kristen (DO),Kenny'),
('Jr, Jack (MD),Freimann'),
('FirstName (title), LastName')

查询:(注意区分大小写,避免字符串中没有(时出错)

SELECT CASE WHEN CHARINDEX('(', FullName) > 1 THEN
           SUBSTRING(FullName, 1, CHARINDEX('(', FullName) - 1)
       ELSE
           FullName
       END As FirstName
FROM @T

结果:

FirstName
Joel 
Yong 
Kristen 
Jr, Jack 
FirstName

尝试从 '('

中拆分字符串
   declare @name table (Fullname varchar(400))    
    Insert into @name values ('Joel (MD),Garris')
    Insert into @name values ('Yong (MD),Park')
    Insert into @name values ('Kristen (DO),Kenny')
    Insert into @name values ('Jr, Jack (MD),Freimann')
    Insert into @name values ('FirstName (title), LastName')

select substring (fullname,0,charindex('(',fullname)) from @name 

试试这个:

SELECT SUBSTRING(Fullname, 1, CASE CHARINDEX('(', Fullname)
   WHEN 0
      THEN LEN(Fullname)
   ELSE CHARINDEX('/', Fullname) - 1
   END) AS FirstName 
FROM MyTable

假设您有以下 table 结构;

CREATE TABLE #temp (Fullname VARCHAR(50))

INSERT INTO #temp VALUES ('Joel (MD),Garris')
INSERT INTO #temp VALUES ('Yong (MD),Park')
INSERT INTO #temp VALUES ('Kristen (DO),Kenny')
INSERT INTO #temp VALUES ('Jr, Jack (MD),Freimann')
INSERT INTO #temp VALUES ('FirstName (title), LastName ')
INSERT INTO #temp VALUES ('aaa, bbb')

仅从 table 获取 FirstName 作为:

SELECT CASE 
        WHEN charindex('(', Fullname, 1) = 0
            THEN Fullname
        ELSE LEFT(Fullname, charindex('(', Fullname, 1) - 2)
        END AS FirstNameOnly
FROM #temp

我使用 charindex 获取 '(' 的索引,然后我使用 LEFT 函数获取全名的字符,从留给那个字符索引,我已经扣除了额外的一个索引以摆脱 firstname 之后的 space。

我使用了 case when then,以防您没有在您的列中存储“(”。 您可以删除那个 case when then,如果您确定,您将始终将“(”存储在您的列中:

SELECT LEFT(Fullname, charindex('(', Fullname, 1) - 2) AS FirstNameOnly
FROM #temp

另一个使用 PARSNAME 解析的示例

declare @tb table (Fullname varchar(400))    
    Insert into @tb values ('Joel (MD),Garris')
    Insert into @tb values ('Yong (MD),Park')
    Insert into @tb values ('Kristen (DO),Kenny')
    Insert into @tb values ('Jr, Jack (MD),Freimann')
    Insert into @tb values ('FirstName (title), LastName')

select PARSENAME(REPLACE(Fullname,'(','.'),2) from @tb 
Joel 
Yong 
Kristen 
Jr, Jack 
FirstName