如何使用SQLite十进制精度表示法

时间:2014-02-13 14:58:20

标签: sqlite

Again我发现自己对可怕的SQLite文档感到沮丧。

http://www.sqlite.org/datatype3.html给出了一个将小数字段定义为decimal(10,5)的示例,但它没有解释10是什么,5是什么。

我确信10是存储的总位数,但我不知道5是什么意思。它是之前的小数位数或小数位后的

2 个答案:

答案 0 :(得分:29)

那页说:

  

在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。

这意味着声明的数据类型对可以存储在列中的值没有影响。

该示例解释了DECIMAL(10, 5)列具有数字亲和力,即存储在该列中的值最好是数字:

> CREATE TABLE MyTable(X DECIMAL(10, 5));
> INSERT INTO MyTable VALUES (1), ('2'), (1.23456789), ('hello'), (x'42');
> SELECT X, typeof(X) FROM MyTable;
1           integer
2           integer
1.23456789  real
hello       text
B           blob

否则,忽略该类型;您也可以使用DECIMAL(-123, 999999)FLUFFY BUNNIES

答案 1 :(得分:25)

根据http://www.sqlite.org/datatype3.html

  

[decimal是几种中的一种]来自更传统的SQL实现的常见数据类型名称   转换为[SQLite]亲和力

(亲和力与SQLite拥有的数据类型的概念差不多。阅读http://www.sqlite.org/datatype3.html了解更多相关信息。)

通过这种逻辑,使用MySQL的文档来解释SQLite十进制精度表示法似乎是安全的。

根据http://www.sqlite.org/datatype3.html

  

标准SQL要求DECIMAL(5,2)能够存储任何值   五位数和两位小数,所以可以存储在   薪水栏的范围是-999.99到999.99。

所以decimal(10,5)表示该字段应该用于存储长度最多为十位的值,小数点前最多五位数,小数点后最多五位数。

当然,输入的任何值都将被存储,即使它不符合这些规则,这意味着字段定义基本上是文档。