我有一个包含 30851204 行的表,我想更新其中一列的值,并且我正在寻找一种有效的方法,例如使用以下代码更新整个列的值。而不是读取每个值并更新其在表中的值
UPDATE table1 SET column1 = 1
列值采用以下一般形式:
<http://rdf.freebase.com/ns/m.0zzzr2k>
我想将每个此类值更新为 URL 路径的最后一段,因此在上面的示例中只需 m.0zzzr2k
即可。以下Java代码计算所需的值,但我不知道如何在MySQL中编写等效的值。
String str[]= typ.split("<http://rdf.freebase.com/ns");
typ=str[1].substring(0, (str[1].length()-1));
最佳答案
正如您所意识到的,使用 SQL 而不是 Java 更新列会更加高效。
根据要更新的列中存储的值的模式,解决方案可能就像使用 MySQL 的 RIGHT()
一样简单。用于抓取列中最后 n 个字符的字符串函数:
UPDATE table1 SET column1 = RIGHT(column1, 9)
如果您想为所有行提取相同数量的字符,这应该可行...取决于您的数据。
或者,如果您总是想要最后一个 /
之后的字符串的最后一部分,您可以使用 SUBSTRING_INDEX()
:
UPDATE table1 SET column1 = SUBSTRING_INDEX(column1, '/', -1)
同样,这取决于您的数据格式。
还支持正则表达式,但在不完全了解您的数据格式的情况下尝试猜测适当的模式是没有意义的。
关于java - 如何高效更新表的列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744618/