Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 使用patindex替换字符_Tsql_Patindex - Fatal编程技术网

Tsql 使用patindex替换字符

Tsql 使用patindex替换字符,tsql,patindex,Tsql,Patindex,我有一个表,其中有一个名称列,其中包含以下名称: A&A草地 C&D铁路公司 D&B铁路公司 我有以下查询,可以得到我想要的正确列 从patindex(“&&%',name)>0的表中选择名称 我需要完成的是使任何具有这种模式的东西崩溃。像这样 A&A草地 C&D铁路公司 D&B铁路公司 我也在研究如何在一个字母后面跟一个空格,后面跟另一个字母后面跟一个空格,然后是多个字母的单词,这样做 AF咨询->AF咨询 D B餐饮->DB咨询 但仅当单字母填充位于值的开头时。 例如,如果名称中的任何位置都

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

A&A草地
C&D铁路公司
D&B铁路公司

我有以下查询,可以得到我想要的正确列
从patindex(“&&%',name)>0的表中选择名称

我需要完成的是使任何具有这种模式的东西崩溃。像这样

A&A草地
C&D铁路公司
D&B铁路公司

我也在研究如何在一个字母后面跟一个空格,后面跟另一个字母后面跟一个空格,然后是多个字母的单词,这样做

AF咨询->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 原始名称新名称规则 ____________ __________ ___________ A&K Consulting A&K Consulting为单个字符在和之间留出的空格 C B金融CB金融空间仅在开始时取出
Albert J K Albert 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上的Test

可能会在后面以Charlie&Company的名义出现,所以我不想这样做