使用patindex替换字符

时间:2018-08-22 19:41:35

标签: tsql patindex

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

A和A草皮
C&D铁路
D&B铁路

我有以下查询,它将为我获取所需的正确列
select name from table where patindex('_ & _ %', name) > 0

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

A&A草皮
建发铁路
D&B铁路

我也在寻找如何用单个字母然后加一个空格,然后是另一个单个字母再加一个空格,再加上一个单词再加上一个这样的单词来做同样的事情

A F咨询-> AF咨询
D B餐饮-> 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

2 个答案:

答案 0 :(得分: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;

测试妊娠here

答案 1 :(得分:0)

第一个很简单:用“&”替换“&”。第二秒钟我将需要更多时间。