我应该在SQLite的Date列中使用什么数据类型,并使用“ 2015-11-09”和“ Nov-15”之类的值?

时间:2019-03-25 21:20:52

标签: database sqlite

我正在分析SQLite数据库中的一些数据,我需要在其中计算每月收集的数据更改。我想知道最合适的数据类型来存储像“ 2015-11-09”这样的数据值,并存储在像“ Nov-12”这样的不同列上。这些值需要收集和比较。

稍后,我需要使用python创建一个带有每月值量的图形。 谢谢

1 个答案:

答案 0 :(得分:0)

由于SQLite的灵活性,数据类型(列类型相似性)并不是很重要see

相反,重要的/有用的/方便的是日期的格式。

就SQLite而言,2015-11-09是两者中较好的格式,因为可以直接使用Date and Time functions驾驶室,例如选择范围,或使用<以其他格式提取数据strong> strftime 功能。

例如考虑以下SQL

DROP TABLE IF EXISTS mytable ;
CREATE TABLE IF NOT EXISTS mytable (col1 TEXT, col2 BLOB, col3 REAL, col4 INTEGER, col5 a_weird_type);
INSERT INTO mytable VALUES 
    ('2015-11-09','2015-11-09','2015-11-09','2015-11-09','2015-11-09'),
    ('NOV 9 2015','NOV 9 2015','NOV 9 2015','NOV 9 2015','NOV 9 2015'),
    ('NOV 09 2015','NOV 09 2015','NOV 09 2015','NOV 09 2015','NOV 09 2015'),
    ('NOV 19 2015','NOV 19 2015','NOV 19 2015','NOV 19 2015','NOV 19 2015')
;
SELECT * FROM mytable;
SELECT * FROM mytable WHERE date(col1) BETWEEN date('2014-01-01') AND date('2016-12-31');
SELECT *,
    CASE
        WHEN substr(col1,4,1) = ' ' AND substr(col1,6,1) = ' ' AND substr(col1,1,3) = 'NOV' THEN
            substr(col1,7,4)||'-11-0'||substr(col1,5,1)
        WHEN substr(col1,4,1) = ' ' AND substr(col1,7,1) = ' ' AND substr(col1,1,3) = 'NOV' THEN
            substr(col1,8,4)||'-11-'||substr(col1,5,2)
        ELSE col1
    END AS colx
    FROM mytable
WHERE date(colx) BETWEEN date('2014-01-01') AND date('2016-12-31')
;

从第一个SELECT查询和插入的数据可以看出,可以使用任何列类型。查询的结果是:-

enter image description here

但是,然后考虑第二个SELECT查询,这只会返回日期已存储为YYYY-MM-DD的单行,因为 NOV 并不等于介于 2014年之间和2016 ,即结果是:-

enter image description here

相反,要选择所有行(所有行都应在该日期范围内),则必须使用第三个SELECT查询之类的东西。它过于复杂(请注意,这仅能满足NOV的要求,所以这是所有月份都要编码的另外22个WHEN子句)。结果是:-

enter image description here