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"来构建查询以从第一个表中选择特定字符?
您可以编写一个 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 }\nRun Code Online (Sandbox Code Playgroud)\n\n那里有一个包含正确数字的数组。
\n\n如果您不能/不想使用 PHP 来实现此目的,我很抱歉,我只是不知道如何在没有 PHP、Perl、Python 或其他类似语言的情况下做到这一点。希望这个解决方案能有所帮助......
\n