从 space 和逗号之间的列中提取某些文本模式的方法

Method to extract certain Text patterns from a column, between the space and comma

我正在尝试找到从字符串中提取特定模式并将它们存储在单独列中的正确方法。

这是一个例子:

原始数据

Smith Pa, Coleman
John Pa-C, Fred
Justin DO, Jack
John OT, Press
Jack ARNP, Nate
Johm DPM, King

期望的输出

Pa
Pa-C
DO
OT
ARNP
DPM

我想将提供者的标题存储在单独的列中。 谢谢

如果您的实际数据与样本的格式完全相同,您可以尝试以下方法-

select substring(column1,charindex(' ',column1,1),
charindex(',',column1,1)-charindex(' ','column1,1)) as newcol from tablename

我已经成功地使用 stuffcharindex、[=15= 的组合安全地提取逗号和最后一个 space 之间的字符串部分]、lencross apply.
我写“安全”是因为如果基于 stuff 的解决方案尝试解析 ill-formatted 字符串,则不会引发错误,这与基于 substring 的解决方案不同,如您所见,它会抛出一个“传递给 LEFT 或 SUBSTRING 函数的长度参数无效”错误。

首先,创建并填充示例数据(在您以后的问题中省去这一步:

DECLARE @T AS TABLE (
    Col varchar(50)
);

INSERT INTO @T (Col) VALUES
-- Valid examples
('Smith Pa, Coleman'),
('John Pa-C, Fred'),
('Justin DO, Jack'),
('John OT, Press'),
('Jack ARNP, Nate'),
('Johm DPM, King'),
-- Invalid examples
('NoSpaceTITLE, LastName'),
('No Comma TITLE LastName'),
-- Strange, but not really invalid example
('Van Damme ACTOR, Jean-Claude');

注意:我在示例数据中添加了一些无效示例,以及一个并非真正无效但与其他示例不同的示例。

查询:

SELECT    Col
        , NULLIF(STUFF(BeforeComma, 1, LEN(BeforeComma) - CHARINDEX(' ', REVERSE(BeforeComma)) + 1, ''), '') As SafeTitle
FROM @T
CROSS APPLY (SELECT STUFF(Col, CHARINDEX(',', Col), LEN(Col), '') As BeforeComma) As A

注意:使用 cross apply 允许我计算逗号前的字符串一次,但在查询本身中使用它三次。

结果:

Col                             SafeTitle
Smith Pa, Coleman               Pa
John Pa-C, Fred                 Pa-C
Justin DO, Jack                 DO
John OT, Press                  OT
Jack ARNP, Nate                 ARNP
Johm DPM, King                  DPM
NoSpaceTITLE, LastName          NULL
No Comma TITLE LastName         NULL
Van Damme ACTOR, Jean-Claude    ACTOR

rextester

上观看现场演示