powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запроc MYSQL на изменение массово данных?
12 сообщений из 12, страница 1 из 1
Запроc MYSQL на изменение массово данных?
    #39860340
angrybot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица user в ней есть поле phone в нем номера вида 8 (915) 333-33-33, как массово изменить их на вид +79153333333
так же может быть 2 элемента в ячейке разделенные запятой и формат может быть 8 915 333 33 33 без дефиса
...
Рейтинг: 0 / 0
Запроc MYSQL на изменение массово данных?
    #39860355
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Укажите точную версию сервера.
...
Рейтинг: 0 / 0
Запроc MYSQL на изменение массово данных?
    #39860368
angrybot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Запроc MYSQL на изменение массово данных?
    #39860373
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ёооо... какая древность.

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

Код: 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
Запроc MYSQL на изменение массово данных?
    #39860397
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
CREATE TABLE trace( number INT,  value TEXT );



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

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

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

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

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

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

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

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



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


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