我有一个包含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));
答案 0 :(得分:3)
使用SQL而不是Java更新列将更有效,因为您似乎意识到了。
根据您要更新的列中存储的值的模式,解决方案可能就像使用MySQL的RIGHT()
字符串函数来获取最后的 n 字符一样简单。专栏:
UPDATE table1 SET column1 = RIGHT(column1, 9)
如果要为所有行提取相同数量的字符,这应该有效...取决于您的数据。
或者,如果您始终希望字符串的最后一部分跟在上一个/
之后,您可以使用SUBSTRING_INDEX()
:
UPDATE table1 SET column1 = SUBSTRING_INDEX(column1, '/', -1)
同样,这取决于您的数据格式。
也支持正则表达式,但我没有必要在不完全了解您的数据格式的情况下猜测适当的模式。
答案 1 :(得分:0)
怎么样:
typ = typ.substring(typ.lastIndexOf("/") + 1);
答案 2 :(得分:-1)
要更新表的列值以实现所需的结果,需要以下MySQL命令。
Update mytable SET column2 = SUBSTRING_INDEX(right(column2,11), '>', 1);