Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запроc MYSQL на изменение массово данных? / 12 сообщений из 12, страница 1 из 1
11.09.2019, 14:29
    #39860340
angrybot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Есть таблица user в ней есть поле phone в нем номера вида 8 (915) 333-33-33, как массово изменить их на вид +79153333333
так же может быть 2 элемента в ячейке разделенные запятой и формат может быть 8 915 333 33 33 без дефиса
...
Рейтинг: 0 / 0
11.09.2019, 14:53
    #39860355
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Укажите точную версию сервера.
...
Рейтинг: 0 / 0
11.09.2019, 15:23
    #39860368
angrybot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Akina,

MySQL dump 10.13 Distrib 5.1.73, for debian-linux-gnu (i486)
--
-- Host: localhost Database: adpo
-- ------------------------------------------------------
-- Server version 5.1.73-1
...
Рейтинг: 0 / 0
11.09.2019, 15:31
    #39860373
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Ух ёооо... какая древность.

Пиши пользовательскую функцию - дешевле будет.
...
Рейтинг: 0 / 0
11.09.2019, 16:03
    #39860395
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Потестируй:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create function NormalizePhoneNumbers (number TEXT)
returns text
deterministic
begin
	set @result := ',';
insert into trace values (1, @result);
	set number := trim(number);
insert into trace values (2, number);
	while number != '' do
		set @char := left(number, 1);
insert into trace values (3, @char);
		if locate(@char, '01023456789,') then
			set @result := concat(@result, @char);
insert into trace values (4, @result);
		end if;
		set number := trim(substring(number from 2));
insert into trace values (5, number);
	end while;
	return substring(replace(@result, ',8', ',+7') from 2);
end;
...
Рейтинг: 0 / 0
11.09.2019, 16:05
    #39860397
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Код: sql
1.
CREATE TABLE trace( number INT,  value TEXT );



Если всё ок - INSERTы удали.
...
Рейтинг: 0 / 0
12.09.2019, 08:08
    #39860686
angrybot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Akina,

ошибку отдало

CREATE FUNCTION NormalizePhoneNumbers(NUMBER TEXT) RETURNS TEXT DETERMINISTIC BEGIN
SET
@result := ','
#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около '' на строке 3
...
Рейтинг: 0 / 0
12.09.2019, 09:01
    #39860692
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
1) Это не ошибка MySQL-сервера, а её интерпретация некоей интерфейсной программой
2) А Вы про DELIMITER не забыли?
...
Рейтинг: 0 / 0
12.09.2019, 13:55
    #39860931
angrybot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
Akina,

Обошелся без функции сделал все replace только вот вопрос остался на замену первого символа 8 на +7, к нему уже простой replace не применишь, как быть ? подскажите ?
...
Рейтинг: 0 / 0
12.09.2019, 13:56
    #39860933
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
angrybot,

Подставьте впереди +, потом замените +8 на +7
...
Рейтинг: 0 / 0
12.09.2019, 14:09
    #39860951
angrybot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
miksoft,

так там встречается 8 и в номере, пример можно запроса

если тупо сделать replace то будет так:

Код: sql
1.
UPDATE `table_name` SET `telephone` = REPLACE( `telephone` , '8 ', '+8' ) WHERE ID <20910 



Я правильно понимаю? Вариант хороший, заменить +8 на +7 можно быстро но с первичным занесением как быть ?
...
Рейтинг: 0 / 0
12.09.2019, 21:15
    #39861180
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запроc MYSQL на изменение массово данных?
miksoftПодставьте впереди +
Код: sql
1.
REPLACE( CONCAT('+',`telephone`), '+8', '+7')
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запроc MYSQL на изменение массово данных? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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