1. Antecedentes del problema
Obtenga la información de IP en un campo en la tabla de datos de MySQL.
Por ejemplo: el valor del campo user_ip en la tabla t_log es {"username":"miracle","ip":"110.230.128.186"}, y se saca la información IP 110.230.128.186 .
Cree tablas e inicialice sentencias SQL, de la siguiente manera:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_log
-- ----------------------------
DROP TABLE IF EXISTS `t_log`;
CREATE TABLE `t_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`event_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`user_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_log
-- ----------------------------
INSERT INTO `t_log` VALUES (1, 'USER', '{\"username\":\"miracle\",\"ip\":\"110.230.128.186\"}');
INSERT INTO `t_log` VALUES (2, 'VM', '{\"username\":\"miracle\",\"ip\":\"110.230.128.175\"}');
INSERT INTO `t_log` VALUES (3, 'USER', '{\"username\":\"miracle\",\"ip\":\"110.230.128.187\"}');
SET FOREIGN_KEY_CHECKS = 1;
2. Plan de implementación
Al analizar datos relativamente regulares, use la función SUBSTRING_INDEX que viene con MySQL e intercepte la información de IP de acuerdo con las comillas dobles **"** en ambos lados de la IP.
1. SQL de consulta
SELECT
user_ip,
SUBSTRING_INDEX( SUBSTRING_INDEX( user_ip, '"', - 2 ), '"', 1 ) AS ip
FROM
t_log
WHERE
event_type = 'USER';
2. Efecto de consulta
3. Instrucciones complementarias
SUBSTRING_INDEX ( str , delim , count ), a saber: SUBSTRING_INDEX (cadena interceptada, palabra clave, número de ocurrencias de la palabra clave)
1. Intercepte todos los caracteres antes del segundo "."
SELECT SUBSTRING_INDEX('www.cnblogs.com', '.', 2);
El resultado es: www.cnblogs
2. Intercepte todos los caracteres después del penúltimo "."
SELECT SUBSTRING_INDEX('www.cnblogs.com', '.', -2);
El resultado es: cnblogs.com
3. Si la palabra clave no existe, devuelve la cadena completa
SELECT SUBSTRING_INDEX('www.cnblogs.com', 'miracle', 1);
El resultado es: www.cnblogs.com
4. Ejemplos adicionales
Obtenga la información relevante de 192.168.127.247 según " . ".
1. Busque de izquierda a derecha, tome la cadena a la izquierda del primer "."
SELECT SUBSTRING_INDEX("192.168.127.247", '.', 1) as str;
El resultado es: 192
2. Busque de izquierda a derecha, obtenga la cadena a la izquierda del segundo "."
SELECT SUBSTRING_INDEX("192.168.127.247", '.', 2) as str;
El resultado es: 192.168
3. Verifique de derecha a izquierda, obtenga la cadena a la derecha del primer "."
SELECT SUBSTRING_INDEX("192.168.127.247", '.', -1) as str;
El resultado es: 247
4. Busque de derecha a izquierda, obtenga la cadena a la derecha del segundo "."
SELECT SUBSTRING_INDEX("192.168.127.247", '.', -2) as str;
El resultado es: 127.247