从 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
我有一列全名,例如:
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