如何以有效的方式更新表的列值?

时间:2015-11-16 21:04:48

标签: java mysql sql-update

我有一个包含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));

3 个答案:

答案 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);