Разделение и объединение строк в MySQL - PullRequest
2 голосов
/ 20 марта 2012

У меня проблема, у меня есть таблица 'ip_address' с 4 полями:
- id_ip
- client_id
- client_ip
- mac_address

Я добавил новое поле с именем'router', и мне нужно заполнить его, так как у меня 800 строк вручную будет очень сложно, возможно ли это сделать в каком-нибудь oneliner из phpMyAdmin?

'router' - это обычно xyz1, где xyzпервые октеты из поля 'client_ip'

Пример строки:
1;8001; 10.3.8.2 ;00: 00: 00: 00: 00: AA;10.3.8. 1

Ответы [ 2 ]

4 голосов
/ 20 марта 2012
update ip_address
set router = concat(substring_index(client_ip,'.',3), '.1');

См. http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index

0 голосов
/ 20 марта 2012

Вы можете использовать функцию mysql SUBSTRING_INDEX, чтобы получить первые 3 октета.Этот запрос заполнит ваше новое поле маршрутизатора, пытаясь использовать первые 3 октета из вашего поля client_ip, как вы указали, при условии, что они разделены знаком '.'персонажи.Возможно, вы захотите рассмотреть IPv6, прежде чем запускать это, но, предполагая, что все является IPv4, здесь вы идете:

, вы должны проверить, что это дает вам то, что вы хотите: SELECT client_ip, SUBSTRING_INDEX (client_ip, '.',3) ИЗ ip_address

это обновит поле маршрутизатора ОБНОВЛЕНИЕ ip_address SET router = SUBSTRING_INDEX (client_ip, '.', 3)

edit: я, кажется, слишком медленный :) Отваш комментарий, просто в конце введите ".1": UPDATE ip_address SET router = CONCAT (SUBSTRING_INDEX (client_ip, '.', 3), '.1')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...