我有一个 sqlite 数据库,有很多表。每个表有很多行。在一个专栏中,我有这样的事情:
[58458, 65856, 75658, 98456, 98578, ... N]
我在创建数据库时犯了一个错误(我不再有权访问初始数据),我需要在第二个数字之后用一个点来制作这些数字,并且有这样的东西:
[58.458, 65.856, 75.658, 98.456, 98.578, ... N]
有什么办法可以做到这一点吗?我更喜欢Java。还是已经有任何工具可以做到这一点?
使用此函数解析每列的信息。
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);
如果它是 NUMERIC 列,这应该可以工作:
UPDATE <TABLE NAME> SET <COLUMN> = <COLUMN>/1000;
如果它不是 NUMERIC 或 REAL 列,那么这应该有效:
UPDATE <TABLE NAME> SET <COLUMN> = CAST(<COLUMN> AS REAL)/1000;
(感谢 Goibniu 的指点)
您可以在列上使用 CAST as REAL,然后按照其他答案中的建议进行更新。
select CAST(YOUR_COL AS REAL) from YOUR_TABLE
在此文档中搜索 CAST 以获取更多信息:SQLite 语言指南