MySQL intercepta por palabra clave

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

inserte la descripción de la imagen aquí


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


Supongo que te gusta

Origin blog.csdn.net/aikudexiaohai/article/details/130193429
Recomendado
Clasificación