Удаление символов после подстроки в поле в SQL - PullRequest
2 голосов
/ 22 июля 2011

Я прошу прощения, если это уже было сделано, но у меня возникают проблемы с поиском ответа.

Я пытаюсь очистить некоторые данные после восстановления базы данных.База данных для художественного магазина.Старый способ сделать это состоит в том, что у нас будет таблица Продуктов, а Имя Продукта будет называться именем искусства, а затем «таким-то и таким-то»

Так, например, один продукт может иметь название «Мона Лиза».автор Leonardo Da Vinci "

Недавно мы хотели добавить функциональность на веб-сайт, чтобы иметь возможность индексировать товары художников.Поэтому я создал таблицу исполнителей с собственным полем имени и больше не хочу указывать имя исполнителя в названии продукта.

Поэтому я хочу удалить все из «по» и далее.

Итаквместо «Мона Лиза» Леонардо да Винчи просто «Мона Лиза»

Как я могу это сделать?

Ответы [ 4 ]

4 голосов
/ 22 июля 2011

Вот код, который вам нужен:

UPDATE Product
SET ProductName = LEFT(ProductName, LEN(ProductName) - CHARINDEX(' yb ', REVERSE(ProductName)) -3 );

Этот подход гарантирует, что вы отрежете текст, начинающийся с последнего экземпляра слова «by», окруженного пробелами. Иначе «Леди у озера Джо Джонсом» стала бы «Леди», и «Эбби Роуд у The Beatles» станет «Ab».

Вызов REVERSE переворачивает порядок символов, чтобы вы могли искать в обратном направлении. Вызов CHARINDEX находит первый экземпляр «yb» в этой перевернутой строке, который является последним экземпляром «by» в исходной строке. Затем обрежьте до этой точки. Вуаля.

Удачи!

1 голос
/ 22 июля 2011

Если вы уверены, что в каждой записи товара есть «по», за которым следует имя исполнителя, вы можете:

  1. Создать поле имени исполнителя в таблице товаров
  2. Получить каждый товарname
  3. Найдите последнее «by» в названии продукта, чтобы получить имя исполнителя
  4. Введите имя исполнителя в поле artist_name
  5. Удалите все после последнего «by»в названии продукта
  6. Обновите запись продукта, указав новое имя продукта и поле artist_name.
  7. Создайте запись для исполнителя, если она еще не существует
0 голосов
/ 22 июля 2011

При использовании TSQL:

DECLARE @v varchar(150) 
SET @v = 'Mona Lisa By Lenoardo Da Vinci'

--Work
SELECT RTrim(LEFT(@v, CHARINDEX('By',@v)-1)) AS Work

--Other Examples of CHARINDEX()+LEN()+RIGHT/LEFT()
--Creator
SELECT LTrim(RIGHT(@v, LEN(@v)-CHARINDEX('By',@v)-1)) AS Creator

--Both
SELECT RTrim(LEFT(@v, CHARINDEX('By',@v)-1)) AS Work, 
LTrim(RIGHT(@v, LEN(@v)-CHARINDEX('By',@v)-1)) AS Creator
0 голосов
/ 22 июля 2011

Вы можете использовать функцию IndexOf, показанную здесь: Функция IndexOf в T-SQL

чтобы проверить, где начинается «по». Ищите «по» вместо «@». Установите это в переменную длины.

Это получит вашу длину. Тогда используйте это: update tbl set artist = left(artist, yournewlength)

Это обрежет все после вашей новой длины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...