我有一个全名列,如:
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))),'')
有谁能告诉我这有什么问题?
答案 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