使用 patindex 替换字符



我有一个带有名称列的表,其中包含以下名称:

A &A Turf
C & D Railways D & B Railways


我有以下查询,它将为我提供我想要
select name from table where patindex('_ & _ %', name) > 0的正确列

我需要完成的是使具有该类型模式的任何内容折叠。像这样

A&A Turf
C&D Railways D&B Railways

我也在研究如何用单个字母后跟一个空格后跟另一个字母后跟一个空格,然后用一个空格做同样的事情,然后像这样用一个以上的字母写单词

A F 咨询 -> AF 咨询 D B 餐饮 -> DB 咨询

但前提是单个字母的东西在值的开头。
例如,如果名称在名称中的任何位置具有上述模式,则除非在开头,否则不要执行任何操作

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

所以像这样的东西将是想要的结果:

原始名称新名称规则 ____________       __________           ___________ A & K Consulting A&K Consulting Space 在 & for Single character 之间取出 C B 财务 CB 财务空间仅在开始时取出 阿尔伯特 J K 阿尔伯特 J K 一开始就不那么孤单

这可以在没有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

第一个很简单:将"&"替换为"&"。 第二个我将不得不花更多的时间。

最新更新