Как ограничить поиск и заменить строку в MySQL - PullRequest
3 голосов
/ 23 мая 2011

Я использую это для поиска и замены строк в MySQL:

UPDATE products 
   SET prodname = REPLACE(prodname, " S", "'S")

Продукты содержат строки, такие как "TYLENOL TABS 100 S", которые я хотел бы преобразовать в "TYLENOL TABS 100'S".

Однако использование вышеприведенного оператора SQL также влияет на строки, такие как «NIKE SHOES», которые станут «NIKE'SHOES» - что мне явно не нравится.

Есть ли способ, которым я могу ограничить функцию замены (или есть другой способ сделать это), чтобы я мог получить желаемый результат? Буква «S» обычно находится в конце строки для большинства моих данных, что, я надеюсь, будет полезно.

Ответы [ 3 ]

6 голосов
/ 23 мая 2011

Вы можете ограничить это подмножеством, более закрытым для ваших нужд, поместив предложение WHERE с помощью REGEXP ():

UPDATE products SET prodname = REPLACE(prodname, " S", "'S") WHERE prodname REGEXP '[0-9]\sS'

Это соответствует строкам, названия продуктов которых имеют номер, за которым следует пробел, после которого следует символ S. К сожалению, в MySQL по умолчанию не реализована замена REGEX, чтобы можно было заменить только это совпадение, так что это также замените "TYLENOL TAB SOLO 100 S" на "TYLENOL TAB'SOLO 100'S", но он не заменит ваш оригинальный "TYLENOL TABS 100 S"

4 голосов
/ 23 мая 2011

Вы можете попробовать:

UPDATE products SET prodname = REPLACE(prodname, " S", "'S")
WHERE prodname LIKE "% S"

Это означает, что продукты с prodname, оканчивающимися на S, будут обновлены. Символ % означает что угодно.

1 голос
/ 23 мая 2011

Если вы хотите, чтобы prodname заканчивался S, вы также можете использовать:

UPDATE products SET prodname = CONCAT(SUBSTR(prodname,1,CHAR_LENGTH(prodname)-2),"'S")
WHERE prodname LIKE "% S"

Это не заменит TYLENOL SOMETHING 100 S на TYLENOL 'SOMETHING 100'S, а на TYLENOL SOMETHING 100'S.Символ % означает что угодно, так как остальные отвечают на данный момент.

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