2

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

A & A 草坪
C & D 铁路
D & B 铁路

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

我需要完成的是使具有这种模式的任何东西都折叠起来。喜欢这个

A&A Turf
C&D 铁路
D&B 铁路

我也在研究如何使用单个字母后跟一个空格,然后是另一个单个字母,然后是一个空格,然后是一个以上的单词,例如

A F Consulting -> AF Consulting
DB Catering -> DB Consulting

但是仅当单个字母的东西位于值的开头时。
例如,如果名称在名称中的任何位置具有上述模式,那么除非它在开头,否则不要做任何事情

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

因此,这样的结果将是理想的结果:

原始名称 新名称规则
____________ __________ ___________
A & K 咨询 A&K 咨询 空间在 & 之间取出单个字符
CB Finance 仅在开始时才占用 CB Finance 空间
阿尔伯特 JK 阿尔伯特 JK 并不是一开始就这么孤单
4

2 回答 2

3

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

于 2018-08-22T20:25:02.943 回答
0

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

于 2018-08-22T19:57:30.380 回答