Mam tabelę z milionami wierszy i pojedynczą kolumną tekstu, która ma dokładnie 11 159 znaków. Wygląda to tak:Jak wybrać nieciągłe znaki z ciągu tekstowego w MySQL?
1202012101...(to 11,159 characters)
1202020120...
0121210212...
...
(to millions of rows)
Zdaję sobie sprawę, że mogę używać
SELECT SUBSTR(column,2,4) FROM table;
... gdybym chciał wyciągnąć znaków 2, 3, 4 i 5:
1202012101...
1202020120...
0121210212...
^^^^
Ale muszę wyodrębnić nieciągłe znaki, np znaków 1,5,7:
1202012101...
1202020120...
0121210212...
^ ^^
Zdaję sobie sprawę, można to zrobić z kwerendy jak:
SELECT CONCAT(SUBSTR(colm,1,1),SUBSTR(colm,5,1),SUBSTR(colm,7,1)) FROM table;
Ale ta kwerenda pobiera bardzo nieporęczny zbudować tysięcy znaków, które muszę wybrać. Więc do pierwszej części pytania - w jaki sposób zbudować kwerendę, która robi coś takiego:
SELECT CHARACTERS(string,1,5,7) FROM table;
Ponadto indeksy znaków Chcę wybrać są z innej tabeli, która wygląda mniej tak:
char_index keep_or_discard
1 keep
2 discard
3 discard
4 discard
5 keep
7 discard
8 keep
9 discard
10 discard
więc do drugiej części pytania, w jaki sposób zbudować kwerendę, aby wybrać konkretne postacie z pierwszej tabeli na podstawie czy keep_or_discard = „keep” dla indeksu bohatera w drugiej tabeli?
Można rozważyć wykonanie tego w procedurze przechowywanej. Nigdy nie napisałem SP dla MySQL, ale w Postgresu użyłbym do tego PL/Perl, ponieważ Perl jest świetny w tego rodzaju manipulacji tekstem. – Flimzy
Wyciągnąłbym też cały ciąg i sparsowałbym go czymś podobnym do Perla, ale stół ma rozmiar około 100 GB (miliony rzędów), a potrzebuję tylko małej części tego 11.159-znakowego długiego łańcucha. –
Aby wyjaśnić, ta tabela ma 11159 * wierszy * lub tabela ma kolumnę zawierającą 11159 * znaków * w każdym wierszu? – JYelton