使用 patindex 替换字符

using patindex to replace characters

我有一个 table,其中有一个名称列,其中包含如下名称:

A & A Turf
建发铁路
D & B 铁路公司

我有以下查询可以得到我想要的正确列
select name from table where patindex('_ & _ %', name) > 0

我需要完成的是让任何具有这种模式的东西都折叠起来。像这样

A&A 草坪
建发铁路
D&B 铁路公司

我也在寻找如何用单个字母做同样的事情,然后是 space,然后是另一个单个字母,然后是 space,然后是像这样的不止一个字母的单词

AF 咨询 -> AF 咨询
DB 餐饮 -> DB 咨询

但前提是单个字母位于值的开头。
例如,如果名称在名称的任何地方都具有上述模式,那么除非它在开头,否则不要做任何事情

ALBERS, J K -> ALBERS, J K
这不会改变,因为它是一个名字而且不是开头。

所以像这样的结果就是期望的结果:

 Original Name      New Name            Rule
____________       __________           ___________
A & K Consulting    A&K Consulting     Space Taken out between & for single characters
C B Finance         CB Finance         space taken out only if beginning beginning
Albert J K          Albert J K         not at beginning so left alone

第一个很简单:用“&”替换“&”。第二个我得花更多的时间。

这可以在没有 PATINDEX 的情况下完成。因为需要替换的是在开头,并且有固定的模式。所以你已经知道位置了。

示例片段:

DECLARE @Table TABLE (ID INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(30));

INSERT INTO @Table (name) VALUES
('A & K Consulting'),
('C B Finance'),
('Albert J K'),
('Foo B & A & R');

SELECT 
name AS OldName,
(CASE 
 WHEN name LIKE '[A-Z] [A-Z] %' THEN STUFF(name,2,1,'') 
 WHEN name LIKE '[A-Z] & [A-Z] %' THEN STUFF(name,2,3,'&')
 ELSE name
 END) AS NewName
FROM @Table;

在 rextester 上测试 here