如何从MySQL中的一串文本中选择不连续的字符?

Ste*_*ner 5 mysql sql substring

我有一个包含数百万行和一列文本的表,正好是11,159个字符.它看起来像这样:

1202012101...(to 11,159 characters)
1202020120...
0121210212...
...
(to millions of rows)
Run Code Online (Sandbox Code Playgroud)

我意识到我可以使用

SELECT SUBSTR(column,2,4) FROM table;
Run Code Online (Sandbox Code Playgroud)

...如果我想拉出字符2,3,4和5:

1202012101...
1202020120...
0121210212...
 ^^^^
Run Code Online (Sandbox Code Playgroud)

但我需要提取不连续的字符,例如字符1,5,7:

1202012101...
1202020120...
0121210212...
^   ^ ^
Run Code Online (Sandbox Code Playgroud)

我意识到这可以通过以下查询来完成:

SELECT CONCAT(SUBSTR(colm,1,1),SUBSTR(colm,5,1),SUBSTR(colm,7,1)) FROM table;
Run Code Online (Sandbox Code Playgroud)

但是这个查询变得非常难以构建我需要选择的数千个字符.所以对于问题的第一部分 - 我如何构建一个类似这样的查询:

SELECT CHARACTERS(string,1,5,7) FROM table;
Run Code Online (Sandbox Code Playgroud)

此外,我想要选择的字符的索引来自不同的表,看起来像这样:

char_index   keep_or_discard
1            keep
2            discard
3            discard
4            discard
5            keep
7            discard
8            keep
9            discard
10           discard
Run Code Online (Sandbox Code Playgroud)

因此,对于问题的第二部分,我如何根据第二个表中该字符索引的keep_or_discard ="keep"来构建查询以从第一个表中选择特定字符?

rik*_*iku 0

您可以编写一个 php 脚本来为您执行此操作:

\n\n
<?php\n    //mysql connect\n    $conn = mysql_connect(\'localhost\', \'mysql_user\', \'mysql_password\');\n\n    if (!$conn) {\n        echo \'Unable to connect to DB: \' . mysql_error();\n        exit;\n    }\n\n    //database connect\n    $db = mysql_select_db(\'mydb\');\n\n    if (!$db) {\n        echo \'Unable to select mydb: \' . mysql_error();\n        exit;\n    }\n\n    //get the keep numbers you\xe2\x80\x99re going to use.\n    //and change the number into string so, for example, instead of 5 you get \'SUBSTR(colm,5,1)\'\n    $result = mysql_query("SELECT number FROM number_table WHERE keep_or_discard=\'keep\'");\n    $numbers = array();\n    while ($row = mysql_fetch_assoc($result)) {\n        $row = \'SUBSTR(colm,\' . $row . \',1)\';\n        $numbers = $row;\n    }\n\n    //implode the array so you get one long string with all the substrings\n    //eg. \'SUBSTR(colm,1,1),SUBSTR(colm,5,1),SUBSTR(colm,12,1)\'\n    $numbers = implode(",", $numbers);\n\n    //pull the numbers you need and save them to an array.\n    $result = mysql_query("SELECT " . $numbers . " FROM table");\n    $concat = array();\n    while ($row = mysql_fetch_assoc($result)) {\n        $concat= $row;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

那里有一个包含正确数字的数组。

\n\n

如果您不能/不想使用 PHP 来实现此目的,我很抱歉,我只是不知道如何在没有 PHP、Perl、Python 或其他类似语言的情况下做到这一点。希望这个解决方案能有所帮助......

\n