我正在分析SQLite数据库中的一些数据,我需要在其中计算每月收集的数据更改。我想知道最合适的数据类型来存储像“ 2015-11-09”这样的数据值,并存储在像“ Nov-12”这样的不同列上。这些值需要收集和比较。
稍后,我需要使用python创建一个带有每月值量的图形。 谢谢
答案 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查询和插入的数据可以看出,可以使用任何列类型。查询的结果是:-
但是,然后考虑第二个SELECT查询,这只会返回日期已存储为YYYY-MM-DD的单行,因为 NOV 并不等于介于 2014年之间和2016 ,即结果是:-
相反,要选择所有行(所有行都应在该日期范围内),则必须使用第三个SELECT查询之类的东西。它过于复杂(请注意,这仅能满足NOV的要求,所以这是所有月份都要编码的另外22个WHEN子句)。结果是:-