Mysql implementa la función de división de cadenas, dividiendo la cadena en varias filas de datos

En Java, podemos usar el método split del objeto String para dividir una cadena en una matriz de cadenas por caracteres especificados, pero MySQL no nos proporciona una función de división de cadenas.Hoy encontramos esta necesidad en nuestro trabajo y encontramos una solución. Compartir con todos

Escenario: una tabla organizada (del tipo con estructura de árbol) tiene un campo para la ruta de árbol que registra la identificación de todos los departamentos principales del departamento actual. Por ejemplo, 1-10-13 significa que la organización principal de la organización es 13, 13 La organización principal de es 10 y la organización principal de 10 es 1. Consulta la estructura organizativa del usuario actual. Por ejemplo, la máquina local del Departamento de Transporte (el departamento de finanzas), la persona a cargo de las finanzas, debe dividir la ruta del árbol y consultarla.

Solucion uno

1 Cree un procedimiento almacenado

CREATE FUNCTION split(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

Análisis de funciones: pase tres parámetros, el primero es el carácter a dividir, el segundo es la división por la cual y el tercer parámetro es el número del área dividida


2 Llame al proceso para consultar

select split('1,2,3,4,5',',',help_topic_id)
from mysql.help_topic 
where help_topic_id between 1 and  length('1,2,3,4,5') -length(replace('1,2,3,4,5',',',''));

Análisis: Aquí hay una tabla mysql.help_topic que viene con mysql. Su help_topic_id es continuo de 0 a 643, y luego solo necesitamos controlar el número de help_topic_id después de dividir la cadena.



Solución dos

SELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 
FROM 
mysql.help_topic 
WHERE 
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

Referencia: https://www.cnblogs.com/gered/p/10797012.html

Supongo que te gusta

Origin blog.csdn.net/dndndnnffj/article/details/111318780
Recomendado
Clasificación