Tôi có một bảng với hàng triệu hàng và một cột văn bản có độ dài chính xác là 11,159 ký tự. Nó trông giống như thế này:Làm cách nào để chọn các ký tự không liên tiếp từ một chuỗi văn bản trong MySQL?
1202012101...(to 11,159 characters)
1202020120...
0121210212...
...
(to millions of rows)
Tôi nhận ra rằng tôi có thể sử dụng
SELECT SUBSTR(column,2,4) FROM table;
... nếu tôi muốn rút ra khỏi nhân vật 2, 3, 4, và 5:
1202012101...
1202020120...
0121210212...
^^^^
Nhưng tôi cần trích xuất các ký tự không liên tục, ví dụ ký tự 1,5,7:
1202012101...
1202020120...
0121210212...
^ ^^
Tôi nhận ra điều này có thể được thực hiện với một truy vấn như:
SELECT CONCAT(SUBSTR(colm,1,1),SUBSTR(colm,5,1),SUBSTR(colm,7,1)) FROM table;
Nhưng truy vấn này được rất khó sử dụng để xây dựng cho hàng ngàn nhân vật mà tôi cần phải lựa chọn. Vì vậy, cho phần đầu của câu hỏi - làm thế nào để xây dựng một truy vấn mà làm điều gì đó như thế này:
SELECT CHARACTERS(string,1,5,7) FROM table;
Bên cạnh đó, các chỉ số của nhân vật tôi muốn chọn từ một bảng khác nhau mà trông giống như thế này:
char_index keep_or_discard
1 keep
2 discard
3 discard
4 discard
5 keep
7 discard
8 keep
9 discard
10 discard
vì vậy cho phần thứ hai của câu hỏi, làm thế nào tôi có thể xây dựng một truy vấn để chọn nhân vật cụ thể từ bảng đầu tiên dựa trên việc keep_or_discard = "giữ" cho chỉ số của nhân vật đó trong bảng thứ hai?
Bạn có thể cân nhắc thực hiện nó trong quy trình được lưu trữ. Tôi đã không bao giờ viết một SP cho MySQL, nhưng trong Postgres, tôi sẽ sử dụng PL/Perl cho rằng, vì perl là tuyệt vời ở đó loại thao tác văn bản. – Flimzy
Ngoài ra, tôi sẽ kéo ra toàn bộ chuỗi và phân tích nó với một cái gì đó giống như Perl, nhưng bảng là một cái gì đó giống như 100GB (hàng triệu hàng), và tôi chỉ cần một phần nhỏ của chuỗi dài 11,159 ký tự đó. –
Chỉ cần làm rõ, bảng này có 11159 * hàng * hoặc bảng có một cột với 11159 * ký tự * trong mỗi hàng? – JYelton