Tsql 使用patindex替换字符
我有一个表,其中有一个名称列,其中包含以下名称: A&A草地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咨询 但仅当单字母填充位于值的开头时。 例如,如果名称中的任何位置都
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的名义出现,所以我不想这样做