我有这个没有指定类型但内容都是数字的数据库。SQLite 将它们视为字符串,我希望它将它们视为数字。是否可以在不更改 SQLite 定义的情况下做到这一点?另外,我看到其他人抱怨 SQLite 将他们的字符串视为数字......为什么它为他们这样做,为什么它不为我这样做?见下文:
sqlite> .sche
CREATE TABLE cpu (timeid primary key, idle, myproc);
sqlite> select myproc, count(*) from cpu group by myproc;
myproc count(*)
---------- ----------
0 1528
1 3
10 496
11 1293
12 688
13 2
15 1
2 42
3 71
4 54
5 38
6 108
7 186
8 384
9 315
sqlite> select max(myproc) from cpu;
max(myproc)
----------
9
sqlite> select sum(myproc), avg(myproc), count(*) from cpu;
sum(myproc) avg(myproc) count(*)
---------- ---------------- ----------
36043 6.91937032059896 5209
sqlite> select sum(myproc), avg(myproc), count(*) from cpu where fmon > 0;
sum(myproc) avg(myproc) count(*)
---------- ---------------- ----------
36043 6.91937032059896 5209
sqlite> select sum(myproc), avg(myproc), count(*) from cpu where fmon != 0;
sum(myproc) avg(myproc) count(*)
---------- ---------------- ----------
36043 6.91937032059896 5209
sqlite> select sum(myproc), avg(myproc), count(*) from cpu where fmon != "0";
sum(myproc) avg(myproc) count(*)
---------- ---------------- ----------
36043 9.79163270850312 3681
因此,如您所见,max()
不是返回最大的数字,而是返回最大的字符串。当我尝试使用该where
子句过滤掉一些行时,它仅在我将列“myproc”与字符串“0”进行比较时才有效,而不是与数字 0(零)进行比较。而且,正如我所说,“myproc”没有定义任何类型。如果我将其定义float
为例如,它可以工作。