Как заменить шаблон регулярного выражения в MySQL - PullRequest
0 голосов
/ 06 марта 2020

У меня есть таблица с именем myTable, в которой есть столбец с именем col1. Этот столбец содержит данные в этом формате: (1 или 2 цифры) (дефис) (8 цифр).

Я хочу заменить все данные в этом столбце и заменить все до дефиса на 4, так что это пример:

--------------------------------
|  old values   |  New Values  |
--------------------------------
| 1-654283568  =>  4-654283568 |
| 2-467862833  =>  4-467862833 |
| 8-478934293  =>  4-478934293 |
| 12-573789475 =>  4-573789475 |
| 16-574738575 =>  4-574738575 |
--------------------------------

Я использую MySQL 5.7.19, я думаю, REGEXP_REPLACE доступен в MySQL Версия 8 + ... не уверен, как этого можно достичь?

Ответы [ 4 ]

1 голос
/ 06 марта 2020

Вам не нужно регулярное выражение; Вы можете использовать SUBSTRING_INDEX, чтобы извлечь все после дефиса и объединить 4- с этим:

UPDATE myTable
SET col1 = CONCAT('4-', SUBSTRING_INDEX(col1, '-', -1))

Демонстрация на dbfiddle

Это будет работать независимо от количества символов после дефиса.

1 голос
/ 06 марта 2020

Глядя на свой шаблон, вы можете избежать регулярного выражения

update myTable  
set col1  = concat('4-', right(col1,8))

или

update myTable  
set col1  = concat('4', right(col1,9))
0 голосов
/ 06 марта 2020

Попробуйте:

UPDATE testing SET val=REPLACE(val,SUBSTRING(val,1,LOCATE('-',val)),'4-');

Здесь: Fiddle: https://www.db-fiddle.com/f/4mU5ctLh8NB9iKSKZF9Ue2/2

Используя LOCATE, чтобы найти позицию '-', затем используйте SUBSTRING, чтобы получить только передняя часть '-'.

0 голосов
/ 06 марта 2020
SELECT CONCAT( @new_prefix, SUBSTRING(old_value FROM LOCATE('-', old_value)) ) AS new_value

UPDATE sourcetable
SET fieldname = CONCAT( '4', SUBSTRING(fieldname FROM LOCATE('-', fieldname)) )
WHERE LOCATE('-', fieldname)
/* AND another conditions */
...