Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите запрос / 22 сообщений из 22, страница 1 из 1
13.05.2015, 00:09:27
    #38956914
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Подскажите запрос:
Имеется таблица t1
В ней есть поле name, которое содержит значения вида "тест группы <тута цифры>гр"
Нужен запрос, чтобы заменить "гр" именно только тогда, когда оно идет сразу после цифр, если "гр" встречается до цифр-игнорировать и не менять.
Знаю, как заменить одно на другое, например
Код: sql
1.
2.
UPDATE t1
SET name=REPLACE(name,'гр','грррр')


Но не знаю, как составить запрос, чтобы выполнялось приведенное выше условие....
Подскажите, плиз.
...
Рейтинг: 0 / 0
13.05.2015, 00:49:55
    #38956927
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
В запросах чайник, просьба не долго и упорно объяснить, а просто написать, как надо...
...
Рейтинг: 0 / 0
13.05.2015, 06:17:25
    #38956963
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
had81818содержит значения вида "тест группы <тута цифры>гр"все строки именно такого вида, т.е. этим "гр" заканчиваются? left/right в помощь.
...
Рейтинг: 0 / 0
13.05.2015, 13:25:12
    #38957430
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
had81818,
Код: sql
1.
2.
3.
UPDATE t1
SET name=REPLACE(name,'гр','грррр')
WHERE name LIKE '%[0-9]гр%'
...
Рейтинг: 0 / 0
13.05.2015, 13:27:21
    #38957435
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
а, не увидел текст: "тест группы 12гр", сорь
...
Рейтинг: 0 / 0
13.05.2015, 13:45:56
    #38957472
Подскажите запрос
Cygapb-007а, не увидел текст: "тест группы 12гр", сорьа ещё не увидел, что тут MySQL, а не MS SQL. "Регулярные" шаблоны типа [0-9] тут не работают, если что...
...
Рейтинг: 0 / 0
13.05.2015, 14:13:34
    #38957531
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Добрый Э - ЭхCygapb-007а, не увидел текст: "тест группы 12гр", сорьа ещё не увидел, что тут MySQL, а не MS SQL. "Регулярные" шаблоны типа [0-9] тут не работают, если что...
ну да... мускуль не родной))
как бы красиво было
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
    txt
  , ISNULL(STUFF(txt, NULLIF(PATINDEX('%[0-9]гр%', txt), 0) + 1, 2, 'GROUP'), txt) p
FROM (
  VALUES ( 'тест группы 12гр'      )
  ,      ( 'тест группы 271группы' )
  ,      ( 'тест группы 2'         )
  ,      ( 'тест группы 3 гр'      )
  ) v(txt)

txtpтест группы 12гртест группы 12GROUPтест группы 271группытест группы 271GROUPуппытест группы 2тест группы 2тест группы 3 гртест группы 3 гр

а так...
разве что методом грубого взлома:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE Table1	(note varchar(100), note2 varchar(100));

INSERT INTO Table1(note)
  VALUES ( 'тест группы 12гр'      )
  ,      ( 'тест группы 271группы' )
  ,      ( 'тест группы 2'         )
  ,      ( 'тест группы 3 гр'      )
  ,      ( 'тест группы 4гр; 5гр'  )
  ;

update table1 set note2=note;

update table1 t
join(
  select 0 n union all select 1 
  union all select 2 union all select 3 
  union all select 4 union all select 5 
  union all select 6 union all select 7 
  union all select 8 union all select 9 
  )n on locate(concat(n.n,'гр'),t.note)>0
set t.note2=insert(t.note2,locate(concat(n.n,'гр'),t.note2)+1,2,'GROUP')
;
select note, note2 from table1;

note note2тест группы 12гр тест группы 12GROUPтест группы 271группы тест группы 271GROUPуппытест группы 2 тест группы 2тест группы 3 гр тест группы 3 гртест группы 4гр; 5гр тест группы 4GROUP; 5гр
...
Рейтинг: 0 / 0
13.05.2015, 14:38:52
    #38957586
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
В итоге запросик как написать?
Код: sql
1.
[0-9]гр


хотел, но так нельзя....
Регулярками часто пользуюсь в нотепаде++, но здесь то никак...
...
Рейтинг: 0 / 0
13.05.2015, 14:46:57
    #38957598
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
had81818Регулярками часто пользуюсь в нотепаде++, но здесь то никак...
Код: sql
1.
WHERE name REGEXP '[0-9]гр'

только это не поможет
...
Рейтинг: 0 / 0
13.05.2015, 14:55:57
    #38957616
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Нарисуй пользовательскую функцию нужной замены, и используй её в запросе.
...
Рейтинг: 0 / 0
13.05.2015, 15:16:13
    #38957647
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Cygapb-007,
Почему не поможет?
Пробую так:
Код: sql
1.
2.
3.
UPDATE t1
SET name=REPLACE(name,'гр',' гр')
WHERE name REGEXP '[0-9]гр'
...
Рейтинг: 0 / 0
13.05.2015, 15:21:17
    #38957649
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
had81818Cygapb-007,
Почему не поможет?
потому что 17633807
...
Рейтинг: 0 / 0
13.05.2015, 15:29:36
    #38957656
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
А разве замена не сработает только в местах, где до гр цифры?
И почему?
...
Рейтинг: 0 / 0
13.05.2015, 15:36:45
    #38957667
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Я так понял, что замена срабатывает только после цифр...
...
Рейтинг: 0 / 0
13.05.2015, 15:38:16
    #38957671
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
had81818А разве замена не сработает только в местах, где до гр цифры?
И почему?
Отберет только те строки, в которых есть '<цифра>гр'
А потом заменит все 'гр' в них

Посмотрите на вариант с желтым цветом. Муторно, но работает

Или, если все строки строго вида '... <цифра>гр' - замените 2 последних знака в них на то, что надо (это вам практически мгновенно посоветовали)
...
Рейтинг: 0 / 0
13.05.2015, 16:01:10
    #38957699
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
В лоб, за ТРИ СЕКУНДЫ
1. замена "тест группы" на "XYZ"
2. замена "гр" на то что нужно
3. обратная замена "XYZ" "тест группы"
частная задача решается частным образом.
...
Рейтинг: 0 / 0
13.05.2015, 16:01:57
    #38957701
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Cygapb-007,
А можно вообще проще-взять дамп, обработать нотепадом++ и закачать на место?
Дамп от нотепада ++ может попортится?
...
Рейтинг: 0 / 0
13.05.2015, 16:20:58
    #38957720
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Alex_UstinovВ лоб, за ТРИ СЕКУНДЫ
1. замена "тест группы" на "XYZ"
2. замена "гр" на то что нужно
3. обратная замена "XYZ" "тест группы"
частная задача решается частным образом.

Только "тест группы" я для примера привел.
На самом деле-значения например такие (взял слова от балды-важна суть):
Форма граненое сердце. Максимальный вес готового мыла 60гр артикул ххх
Игрушка детская Молоток озвученный 250гр артикул ххх х
Надо отделить граммы от цифр пробелом.
Попробую обработать нотепадом++....
...
Рейтинг: 0 / 0
13.05.2015, 16:21:48
    #38957721
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Все равно это только один раз сделать надо.
...
Рейтинг: 0 / 0
13.05.2015, 16:37:50
    #38957743
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
в ЛОБ (не больше 10-ти действий, -5 минут максимум)
замена
"0гр" на "0 гр"
повторить еще 9 раз (для оставшихся цифр)
и выкинуть это из головы
...
Рейтинг: 0 / 0
13.05.2015, 16:56:24
    #38957778
had81818
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Alex_Ustinov,
Действительно - так и надо сделать.

Код: sql
1.
2.
3.
4.
5.
UPDATE t1
SET name=REPLACE(name,'0гр','0 гр')
UPDATE t1
SET name=REPLACE(name,'1гр','1 гр')
.....


Можно сделать нотепадом или как вверху написал.
Если бы оператор, работающий с бд, знал, что надо для сео отделять "гр" пробелом-проблемы бы не было....
За совет-спасибо!
...
Рейтинг: 0 / 0
13.05.2015, 17:34:38
    #38957842
Подскажите запрос
had81818Alex_Ustinov,
Действительно - так и надо сделать.

Код: sql
1.
2.
3.
4.
5.
UPDATE t1
SET name=REPLACE(name,'0гр','0 гр')
UPDATE t1
SET name=REPLACE(name,'1гр','1 гр')
.....


Можно сделать нотепадом или как вверху написал.
Если бы оператор, работающий с бд, знал, что надо для сео отделять "гр" пробелом-проблемы бы не было....
За совет-спасибо!только не нужно делать 10 апдейтов. Лучше 10 раз вложить реплайс один в другой и за раз все проапдейтить...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите запрос / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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