Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE REPLACE % / 24 сообщений из 24, страница 1 из 1
13.03.2019, 00:27
    #39785130
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
Всем доброго времени)
Не первый раз в БД, но первую неделю в 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
13.03.2019, 00:39
    #39785132
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
Для функции REPLACE знак процента ничем не отличается от любого другого символа. Поскольку в именах городов подстрока 'A%' нигде не встречается, то они и не изменяются.
...
Рейтинг: 0 / 0
13.03.2019, 00:43
    #39785133
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
miksoft, спасибо) Не могу найти управляющие символы для REPLACE, нельзя разве их использовать, как % или * ?
...
Рейтинг: 0 / 0
13.03.2019, 00:50
    #39785135
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
vasiliska_skaНе могу найти управляющие символы для REPLACEТаких нет.
См. https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace

Если версия MySQL 8 и выше, то см. REGEXP_REPLACE
...
Рейтинг: 0 / 0
13.03.2019, 01:28
    #39785137
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 01:41
    #39785139
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
Первый вариант - начало строки, буква "А", три любых символа (точка), буква "а", конец строки.
Второй вариант - начало строки, буква "А" в количестве от нуля и больше (звезда), буква "а", конец строки.
...
Рейтинг: 0 / 0
13.03.2019, 01:50
    #39785141
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
vkle, хмм, тогда совсем не понимаю и не могу найти, а как произвольное кол-во символов?
...
Рейтинг: 0 / 0
13.03.2019, 02:22
    #39785145
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
vasiliska_ska,

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

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

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

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

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

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

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
13.03.2019, 10:37
    #39785219
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 10:46
    #39785224
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 11:01
    #39785234
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 12:18
    #39785289
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
Akina, vkle, спасибо!! определенная ясность появилась. и SUBSTRING_INDEX и REGEXP_REPLACE более менее понятны.
Не могу разобраться, как им в качестве первого аргумента не один String подсунуть, а всю пачку из, например, SELECT field_name FROM table_name? Только хранимой процедурой с циклом?
...
Рейтинг: 0 / 0
13.03.2019, 12:55
    #39785323
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
Зачем хранимку то? И то и другое - готовые функции. Вместо явно заданной строки пишите имя поля и пользуйтесь на здоровье.
А строка в качестве аргумента - это для демонстрации, чтобы с таблицей не париться.
...
Рейтинг: 0 / 0
13.03.2019, 13:24
    #39785357
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
vasiliska_skaкак им в качестве первого аргумента не один String подсунуть, а всю пачку из, например, SELECT field_name FROM table_name? Только хранимой процедурой с циклом?Вот нафига? может, пора попробовать понять, как работает SQL-сервер? это в каком-нить VBA ты шерстишь записи в массиве по одной - а сервер тебе обрабатывает и отдаёт сразу готовый массив результатов, просто перебирай записи.
...
Рейтинг: 0 / 0
13.03.2019, 16:15
    #39785475
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 17:01
    #39785495
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 17:03
    #39785498
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
И, да, если уж селект и имя поля, то должно быть и FROM table_name
...
Рейтинг: 0 / 0
13.03.2019, 18:01
    #39785527
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
13.03.2019, 19:03
    #39785563
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
Код: sql
1.
select REGEXP_REPLACE(field_name , '^scu-.*-', '') from `имя таблицы`; 
...
Рейтинг: 0 / 0
13.03.2019, 19:43
    #39785581
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
vasiliska_ska,

Такое впечатление сложилось, что Вы пытаетесь методом тыка писать запрос. Доложу Вам, пустая это затея. Почитайте хотя бы про основы SQL, про базовый синтаксис запросов.
...
Рейтинг: 0 / 0
14.03.2019, 07:54
    #39785651
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
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
14.03.2019, 14:37
    #39786053
vasiliska_ska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE REPLACE %
vkle, ну да, в целом согласна, просто вопрос срочный был. В любом случае, спасибо всем откликнувшимся!))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE REPLACE % / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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