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