我有一个sqlite数据库,有很多表。每个表都有很多行。在一栏中我有这样的事情:
[58458, 65856, 75658, 98456, 98578, ... N]
我在创建数据库时犯了一个错误(我不再访问初始数据),我需要的是在第二个数字之后用一个punct制作这些数字,并且有类似的东西:
[58.458, 65.856, 75.658, 98.456, 98.578, ... N]
我有什么方法可以做到这一点?我更喜欢Java。或者它已经有任何工具可以做到这一点吗?
答案 0 :(得分:2)
使用此功能解析每列的信息。
public static String convertColumn(String textF)
{
String textAux = "";
String newText = "[";
int i = 0;
textF = textF.substring(1, textF.length() - 1);
while(i < textF.length())
{
textAux = textF.substring(i, i + 5);
int nrAux = Integer.parseInt(textAux);
i+=7;
int a;
int b;
a = nrAux / 1000;
b = nrAux - a * 1000;
double newNr;
newNr = a + b * 0.001;
newText = newText + newNr + ", ";
}
newText = newText.substring(0, newText.length() - 2);
newText += "]";
return newText;
}
该函数将参数作为参数[58458,65856,75658,98456,98578],您可以从中获取 SQL表,返回值为[58.458,65.856,75.658,98.456,98.578],这是用列更新列所需的值。
对于SQL,基本思想是:
UPDATE table
SET column = convertColumn(column);
答案 1 :(得分:1)
如果它是NUMERIC列,这应该有效:
UPDATE <TABLE NAME> SET <COLUMN> = <COLUMN>/1000;
如果它不是NUMERIC或REAL列,那么这应该有效:
UPDATE <TABLE NAME> SET <COLUMN> = CAST(<COLUMN> AS REAL)/1000;
(感谢Goibniu的指针)
答案 2 :(得分:1)
您可以在列上使用CAST作为REAL,然后按照另一个答案中的建议进行更新。
select CAST(YOUR_COL AS REAL) from YOUR_TABLE
在此文档中搜索CAST以获取更多信息:SQLite language guide