我有一个带有名称列的表,其中包含类似以下的名称:
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
答案 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)
第一个很简单:用“&”替换“&”。第二秒钟我将需要更多时间。