Для вашей второй проблемы:
UPDATE post
SET message = concat(message,'.png')
Просто добавьте текущую запись с помощью '.png': -)
РЕДАКТИРОВАТЬ: Итак, мой плохой! Вы должны попробовать Regex:
UPDATE post
SET message = CONCAT(REGEXP_SUBSTR(path,'.*https:\/\/example\.com\/images\/[0-9]{4,6}'),'.png',REGEXP_SUBSTR(path,'\[\/LINK\].*'))
Этот оператор утверждает, что расширение файла не существует. Таким образом, вы можете выполнить инструкцию без предложения where, потому что расширение файла не будет удвоено. Чтобы убедиться, что вы можете проверить это раньше с помощью:
SELECT
message
,CONCAT(REGEXP_SUBSTR(path,'.*https:\/\/example\.com\/images\/[0-9]{4,6}'),'.png',REGEXP_SUBSTR(path,'\[\/LINK\].*')) as corr_message
FROM path
Проверьте шаблон, например, на Regex101.com с вашим примером в виде строки
Here is your image link: [LINK]https://example.com/images/1234[/LINK] You can view it now.
и следующий как образец
(.*https:\/\/example\.com\/images\/[0-9]{4,6})(\[\/LINK\].*)
Скобка строит группы. Первая группа для первой части строки. В обновлении это первая часть Concat. После этого мы установим «.png». Третья часть с вашим оператором обновления представляет собой вторую группу регулярных выражений.
Надеюсь, это поможет вам. :)
EDIT2: Хорошо, это будет соответствовать вашим строкам.
UPDATE post
SET message = CONCAT(REGEXP_SUBSTR(path,'.*https:\/\/example\.com\/images\/[0-9]{4,6}'),'.png',REGEXP_SUBSTR(path,'\[\/(IMG|LINK)\].*'))
WHERE message LIKE '%https://example.com/images/%'
Шаблон для проверки:
(.*https:\/\/example\.com\/images\/[0-9]{4,6})(\[\/(IMG|LINK)\].*)
Как выбрать для проверки ваших данных перед обновлением:
SELECT
message
,CONCAT(REGEXP_SUBSTR(path,'.*https:\/\/example\.com\/images\/[0-9]{4,6}'),'.png',REGEXP_SUBSTR(path,'\[\/(IMG|LINK)\].*')) as corr_message
FROM path
WHERE message LIKE '%https://example.com/images/%'
Надеюсь, что сейчас подходит для вашего случая:)