Использование patindex для замены символов
У меня есть таблица с именем столбца в нем, который содержит такие имена, как:
A & A Turf
C & D Railways
D & B Railways
У меня есть следующий запрос, который даст мне правильные столбцы, которые я хочу select name from table where patindex('_ & _ %', name) > 0
Что мне нужно сделать, так это сделать что-либо с таким типом шаблона. Как это
A & A Turf
C & D Railways
D & B Railways
Я также смотрю, как я могу сделать то же самое с одной буквой, за которой следует пробел, за которым следует еще одна буква, за которой следует пробел, а затем слова, содержащие более одной буквы, например
АФ Консалтинг -> АФ Консалтинг
БД Кейтеринг -> БД Консалтинг
но только если одна буква находится в начале значения.
Примером может быть, если имя имеет шаблон, упомянутый выше где-либо в имени, тогда ничего не делайте, если оно не в начале
ALBERS, J K -> ALBERS, J K
Это не изменится, потому что это имя, а не в начале.
Так что примерно так будет желаемый результат:
Исходное имя Новое имя Правило ____________ __________ ___________ A & K Consulting A&K Consulting Пространство между и для одиночных персонажей C B Finance CB Finance место вывозится только в начале Альберт JK Альберт JK не в начале, так что остался один
2 ответа
Это можно сделать без 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 здесь
Первый из них прост: замените " & " на "&". Второе мне придется занять больше времени.