从字符串SQL中提取特定术语

时间:2017-01-19 07:51:06

标签: sql sql-server replace charindex

我有一个全名列,如:

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

我真正想要的只是FirstName。我试过以下但是无法得到结果。

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

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

尝试单独拉出标题,然后尝试将其替换为null:

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

有谁能告诉我这有什么问题?

5 个答案:

答案 0 :(得分:4)

我不确定你为什么需要replace,但这里使用的是substring,只能获得名字:

创建并填充样本表(在将来的问题中保存此步骤)

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

答案 1 :(得分:2)

使用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 

答案 2 :(得分:0)

尝试从'('

分割字符串
   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 

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

假设您正在使用以下表结构;

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')

仅从表中获取FirstName:

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

我已经使用 charindex 来获取'('然后我使用 LEFT 函数来获取从左到右的字符索引的全名字符,我有扣除额外的一个索引以消除名字后的空格。

如果您没有在列中存储'('),我已经使用案例。 您可以删除那个案例,如果您确定,您将始终拥有'('存储在您的列中:

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