Tengo una tabla con millones de filas y una sola columna de texto que tiene exactamente 11,159 caracteres. Se ve así:¿Cómo selecciono caracteres no contiguos de una cadena de texto en MySQL?
1202012101...(to 11,159 characters)
1202020120...
0121210212...
...
(to millions of rows)
Soy consciente de que puedo usar
SELECT SUBSTR(column,2,4) FROM table;
... si quería sacar caracteres 2, 3, 4 y 5:
1202012101...
1202020120...
0121210212...
^^^^
Pero necesito extraer caracteres no contiguos, por ejemplo 1,5,7 caracteres:
1202012101...
1202020120...
0121210212...
^ ^^
Soy consciente de que se pueden hacer con una consulta como:
SELECT CONCAT(SUBSTR(colm,1,1),SUBSTR(colm,5,1),SUBSTR(colm,7,1)) FROM table;
Pero esta consulta se pone muy difícil de manejar para construir miles de caracteres que tengo que seleccionar. Así que para la primera parte de la pregunta - ¿Cómo construir una consulta que hace algo como esto:
SELECT CHARACTERS(string,1,5,7) FROM table;
Por otra parte, los índices de los caracteres que desea seleccionar son de una tabla diferente que se ve algo de esta manera:
char_index keep_or_discard
1 keep
2 discard
3 discard
4 discard
5 keep
7 discard
8 keep
9 discard
10 discard
Así que para la segunda parte de la pregunta, ¿cómo podría crear una consulta para seleccionar los caracteres específicos de la primera tabla en función de si keep_or_discard = "mantener" para el índice de ese personaje en la segunda tabla?
Puede considerar hacerlo en un procedimiento almacenado. Nunca escribí un SP para MySQL, pero en Postgres, usaría PL/Perl para eso, ya que Perl es excelente en ese tipo de manipulación de texto. – Flimzy
Además, extraía toda la cadena y la analizaba con algo así como Perl, pero la tabla es algo así como 100 GB (millones de filas), y solo necesito una pequeña parte de esa cadena de 11.159 caracteres de longitud. –
Solo para aclarar, esta tabla tiene 11159 * filas * o la tabla tiene una columna con 11159 * caracteres * en cada fila? – JYelton