SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.12.2012 12:43:25

Брат
Участник
Зарегистрирован: 06.12.2012
Сообщений: 4

Как заменять полученные данные?

Допустим после выполнения запроса получаю данные в виде таблицы

Товар                        Цена
Конфеты "Ваврапр"      320
Конфеты "Фпаппвап"    540
Вафли "Мрпаер"          200
Вафли "Упиипи"          300
Помидоры китайские   100

Что и куда надо подставить в запрос чтобы получать Конфеты вместо Конфеты "Ваврапр" и Вафли вместо Вафли "Мрпаер" а помидоры оставить неизменными? К бд доступ в режиме чтения.

Неактивен

 

#2 06.12.2012 15:11:26

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2423

Re: Как заменять полученные данные?

Проще всего найти первую кавычку (или первый пробел) - и вернуть то, что до искомого символа. см
http://dev.mysql.com/doc/refman/5.0/en/ … ion_locate
и
http://dev.mysql.com/doc/refman/5.0/en/ … _substring


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 07.12.2012 09:00:44

Брат
Участник
Зарегистрирован: 06.12.2012
Сообщений: 4

Re: Как заменять полученные данные?

Нашел функцию REPLACE, но не смог подставить её куда надо. Если запрос сейчас выглядит типа

SELECT g.goods 'Товар', p.price 'Цена' FROM goods g JOIN price p USING(id_goods) WHERE g.goods IN (1,5,9,97)

то как правильно реализовать замену? Сейчас полученные таблицы пропускаю через поиск и замену excel'я, но кажется быстрее будет менять всё это дело на уровне запроса...

Неактивен

 

#4 07.12.2012 09:20:06

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2423

Re: Как заменять полученные данные?

Не думаю, что тут replace нужен, простого update вполне хватит.
Ниже привожу пример реализации замены.

Код:

mysql> create table t_6303(id int primary key auto_increment, val varchar(255));
Query OK, 0 rows affected (0.25 sec)

mysql> insert into t_6303(val) values('With "quotes"'),('Without quotes');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t_6303;
+----+----------------+
| id | val            |
+----+----------------+
|  1 | With "quotes"  |
|  2 | Without quotes |
+----+----------------+
2 rows in set (0.00 sec)

mysql> select if( 0 <> locate('"', val), substring(val, 1, locate('"',val) -1 ) , val ) from t_6303;
+---------------------------------------------------------------------------+
| if( 0 <> locate('"', val), substring(val, 1, locate('"',val) -1 ) , val ) |
+---------------------------------------------------------------------------+
| With                                                                      |
| Without quotes                                                            |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 07.12.2012 10:50:14

Брат
Участник
Зарегистрирован: 06.12.2012
Сообщений: 4

Re: Как заменять полученные данные?

Всё дело не в кавычках. Нужно заменить Конфеты* на Сироп, а Вафли* на "Утиные истории". Помидоры пусть остаются китайскими. Цель - получение однотипных данных для сводных таблиц.

Неактивен

 

#6 07.12.2012 19:32:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5847

Re: Как заменять полученные данные?

SELECT if(g.goods like 'Конфеты%','Сироп',if(g.goods like 'Вафли%','Утиные истории',g.goods)) 'Товар', p.price 'Цена' FROM goods g JOIN price p USING(id_goods) WHERE g.goods IN (1,5,9,97);

Неактивен

 

#7 10.12.2012 06:35:40

Брат
Участник
Зарегистрирован: 06.12.2012
Сообщений: 4

Re: Как заменять полученные данные?

Огромное всем спасибо, разобрался.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson