powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE REPLACE %
24 сообщений из 24, страница 1 из 1
UPDATE REPLACE %
    #39785130
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени)
Не первый раз в БД, но первую неделю в MySql, половину из которой провела разбираясь с этим:

пишу UPDATE world.city SET world.city.Name = REPLACE(world.city.Name, 'A', '-'); получаю что-то типа

'3857', '-nchorage', 'USA', 'Alaska', '260283'
'1506', '-ncona', 'ITA', 'Marche', '98329'
'2155', '-nda', 'CHN', 'Heilongjiang', '136446'
'3506', '-ndijon', 'UZB', 'Andijon', '318600'
'1433', '-ndimeshk', 'IRN', 'Khuzestan', '106923'
'2369', '-ndong', 'KOR', 'Kyongsangbuk', '188443'

вместо

'3857', 'Anchorage', 'USA', 'Alaska', '260283'
'1506', 'Ancona', 'ITA', 'Marche', '98329'
'2155', 'Anda', 'CHN', 'Heilongjiang', '136446'
'3506', 'Andijon', 'UZB', 'Andijon', '318600'
'1433', 'Andimeshk', 'IRN', 'Khuzestan', '106923'
'2369', 'Andong', 'KOR', 'Kyongsangbuk', '188443'

но, когда использую в подстроке поиска символ %, типа так

UPDATE world.city SET world.city.Name = REPLACE(world.city.Name, 'A%', '-');

ни одной строки в бд не меняется(
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785132
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для функции REPLACE знак процента ничем не отличается от любого другого символа. Поскольку в именах городов подстрока 'A%' нигде не встречается, то они и не изменяются.
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785133
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, спасибо) Не могу найти управляющие символы для REPLACE, нельзя разве их использовать, как % или * ?
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785135
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaНе могу найти управляющие символы для REPLACEТаких нет.
См. https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace

Если версия MySQL 8 и выше, то см. REGEXP_REPLACE
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785137
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, прошу прощения, я, видимо, деревянная(

такой запрос
SELECT world.city.Name FROM world.city WHERE world.city.Name REGEXP '^A...a$'
выдает 15 нужных результатов,

а такой
SELECT world.city.Name FROM world.city WHERE world.city.Name REGEXP '^A*a$'
ни одного..
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785139
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый вариант - начало строки, буква "А", три любых символа (точка), буква "а", конец строки.
Второй вариант - начало строки, буква "А" в количестве от нуля и больше (звезда), буква "а", конец строки.
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785141
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, хмм, тогда совсем не понимаю и не могу найти, а как произвольное кол-во символов?
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785145
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_ska,

1. Сперва задается символ или символьный класс (в прямоугольных скобках) или последовательность (в круглых скобках).

2. Количество этого, заданного в пункте первом, определяется квантификатором, следующим за ним.
Если квантификатор отсутствует - одна штука.
Дальше варианты.
Звезда - любое количество (ноль или больше).
Плюс - один или больше.
Вопрос - ноль или один (может быть или не быть).
Ну и в фигурных скобках можно указать явно количество или диапазон количества.

Подробные примеры есть в описании синтаксиса https://dev.mysql.com/doc/refman/8.0/en/regexp.html#regexp-syntax

Таким образом, "произвольное кол-во символов" - это звезда, если ноль входит в понятие "произвольное количество" и плюс, если ноль не является допустимым произвольным количеством. Вроде, простой вопрос, но не вполне однозначен. :)
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785196
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleТаким образом, "произвольное кол-во символов" - это звезда, если ноль входит в понятие "произвольное количество" и плюс, если ноль не является допустимым произвольным количеством. Вроде, простой вопрос, но не вполне однозначен. :)

это понимаю, видимо неправильно выразилась: произвольное количество произвольных символов
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785206
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или надоумте, пожалуйста, бедную девушку, в целом проблема такая:

хочу из этого :

1, 'svt-413-asdf',
2, 'svt-414-fdgffr',
3, 'svt-4124-ssxsx',
4, 'svt-11-fefw',

получить это:


1, 'asdf',
2, 'fdgffr',
3, 'ssxsx',
4, 'fefw',

иными словами заменить подстроку 'svt-&-' (если предположить, что % - произвольное кол-во произвольных символов) на пустую строку ''
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785219
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaпроизвольное кол-во произвольных символов.* или .+ по ситуации.
Точка - любой символ. Точнее, почти любой и зависит от модификатора match_type).

Ваш вариант в зависимости от исходных данных и точности определения можно так реализовать
Код: sql
1.
SELECT REGEXP_REPLACE('svt-413-asdf', '.+-', '');

или так
Код: sql
1.
SELECT REGEXP_REPLACE('svt-413-asdf', '^svt-[0-9]+-', '');

или так
Код: sql
1.
SELECT REGEXP_REPLACE('svt-413-asdf', '^svt-.+-', '');
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785224
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaВсем доброго времени)
Не первый раз в БД, но первую неделю в MySql, половину из которой провела разбираясь с этим:

пишу UPDATE world.city SET world.city.Name = REPLACE(world.city.Name, 'A', '-'); получаю что-то типа

'3857', '-nchorage', 'USA', 'Alaska', '260283'
'1506', '-ncona', 'ITA', 'Marche', '98329'
'2155', '-nda', 'CHN', 'Heilongjiang', '136446'
'3506', '-ndijon', 'UZB', 'Andijon', '318600'
'1433', '-ndimeshk', 'IRN', 'Khuzestan', '106923'
'2369', '-ndong', 'KOR', 'Kyongsangbuk', '188443'

вместо

'3857', 'Anchorage', 'USA', 'Alaska', '260283'
'1506', 'Ancona', 'ITA', 'Marche', '98329'
'2155', 'Anda', 'CHN', 'Heilongjiang', '136446'
'3506', 'Andijon', 'UZB', 'Andijon', '318600'
'1433', 'Andimeshk', 'IRN', 'Khuzestan', '106923'
'2369', 'Andong', 'KOR', 'Kyongsangbuk', '188443'

но, когда использую в подстроке поиска символ %, типа так

UPDATE world.city SET world.city.Name = REPLACE(world.city.Name, 'A%', '-');

ни одной строки в бд не меняется(

Для поиска и замены по регвыражениям нужны другие функции.

https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785234
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaхочу из этого :

1, 'svt-413-asdf',
2, 'svt-414-fdgffr',
3, 'svt-4124-ssxsx',
4, 'svt-11-fefw',

получить это:


1, 'asdf',
2, 'fdgffr',
3, 'ssxsx',
4, 'fefw',
Код: sql
1.
SELECT SUBSTRING_INDEX(field_name, '-', -1)
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785289
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, vkle, спасибо!! определенная ясность появилась. и SUBSTRING_INDEX и REGEXP_REPLACE более менее понятны.
Не могу разобраться, как им в качестве первого аргумента не один String подсунуть, а всю пачку из, например, SELECT field_name FROM table_name? Только хранимой процедурой с циклом?
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785323
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем хранимку то? И то и другое - готовые функции. Вместо явно заданной строки пишите имя поля и пользуйтесь на здоровье.
А строка в качестве аргумента - это для демонстрации, чтобы с таблицей не париться.
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785357
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaкак им в качестве первого аргумента не один String подсунуть, а всю пачку из, например, SELECT field_name FROM table_name? Только хранимой процедурой с циклом?Вот нафига? может, пора попробовать понять, как работает SQL-сервер? это в каком-нить VBA ты шерстишь записи в массиве по одной - а сервер тебе обрабатывает и отдаёт сразу готовый массив результатов, просто перебирай записи.
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785475
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinaможет, пора попробовать понять, как работает SQL-сервер?
пойду гуглить матчасть)

Akinaпросто перебирай записи.
а вот это никак не смогла нагуглить,
пробовала
Код: sql
1.
select REGEXP_REPLACE((select field_name from table_name), '^scu-.*-', ''); 


ругается, что подзапрос выдает больше 1 строки, добавляла in, any - тоже никак(
Код: sql
1.
select REGEXP_REPLACE(field_name , '^scu-.*-', ''); 


возражает, что Error Code: 1054. Unknown column 'field list'.
намекните, пожалуйста, как реализовать, 3 часа 47 минут до часа Х)
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785495
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaпробовала
Код: sql
1.
select REGEXP_REPLACE((select field_name from table_name), '^scu-.*-', ''); 



ругается, что подзапрос выдает больше 1 строки, добавляла in, any - тоже никак(Правильно ругается, должно быть лишь одна запись из одного поля. В общем смысле, глупость это, а не запрос.


vasiliska_ska
Код: sql
1.
select REGEXP_REPLACE(field_name , '^scu-.*-', ''); 



возражает, что Error Code: 1054. Unknown column 'field list'.Таки проверьте, правильно ли имя поля указано. А то в запросе одно, в сообщени об ошибке другое, а в реале может и третье окажется...
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785498
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, да, если уж селект и имя поля, то должно быть и FROM table_name
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785527
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleтаки проверьте, правильно ли имя поля указано. А то в запросе одно, в сообщени об ошибке другое, а в реале может и третье окажется...
в таблице, которая для примера идет в MySQL Workbench по умолчанию, пишу
Код: sql
1.
SELECT REGEXP_REPLACE(world.city.Name, '^scu-.*-', '');


и получаю Error Code: 1109. Unknown table 'world.city' in field list

хотя есть такая таблица 'world.city'.. где-то с синтаксисом туплю? указываю имя поля(столбца) в формате <имя бд>.<имя таблицы>.<имя столбца>
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785563
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select REGEXP_REPLACE(field_name , '^scu-.*-', '') from `имя таблицы`; 
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785581
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_ska,

Такое впечатление сложилось, что Вы пытаетесь методом тыка писать запрос. Доложу Вам, пустая это затея. Почитайте хотя бы про основы SQL, про базовый синтаксис запросов.
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39785651
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasiliska_skaпишу
Код: sql
1.
SELECT REGEXP_REPLACE(world.city.Name, '^scu-.*-', '');



и получаю Error Code: 1109. Unknown table 'world.city' in field list

хотя есть такая таблица 'world.city'..world.city.Name - это поле Name в таблице city в базе данных world. Эта таблица должна 1) существовать 2) видима (как минимум быть указана в секции FROM запроса). И если по первому пункту сказать нечего, то со вторым явные проблемы - в запросе секции FROM в принципе нет.
...
Рейтинг: 0 / 0
UPDATE REPLACE %
    #39786053
vasiliska_ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, ну да, в целом согласна, просто вопрос срочный был. В любом случае, спасибо всем откликнувшимся!))
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE REPLACE %
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]