タイプが指定されていないこのDBがありますが、内容はすべて数値です。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
たとえば、それを定義すると、機能します。