Какой тип данных я должен использовать для своих столбцов Date в SQLite со значениями, такими как «2015-11-09» и «Nov-15»? - PullRequest
0 голосов
/ 26 марта 2019

Я анализирую некоторые данные из базы данных SQLite, где мне нужно подсчитать сбор данных за месяц.Мне было интересно, какой тип данных подходит для хранения значений данных, таких как «2015-11-09» и в другой колонке, такой как «Nov-12».Эти значения должны быть собраны и сравнены.

Мне нужно позже использовать python для создания графика с количеством значений в месяц.Спасибо

1 Ответ

0 голосов
/ 26 марта 2019

Тип данных (сходство типов столбцов) из-за гибкости SQLite не очень важен см. .

Скорее всего, что важно / полезно / удобно, это формат даты.

Что касается SQLite, то 2015-11-09 является лучшим форматом из двух, поскольку функции Дата и время могут использоваться непосредственно, скажем, для выбора диапазона или для извлечения данных в другой формат с использованием функции 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

Однако, затем рассмотрите 2-й запрос SELECT, он вернет только одну строку, где дата была сохранена как YYYY-MM-DD, так как NOV не будет равняться между 2014 и 2016 то есть результат: -

enter image description here

Скорее, чтобы выбрать все строки (все должны быть в этом диапазоне дат), вам нужно будет использовать что-то вроде третьего запроса SELECT. Это чересчур сложно (учитывая, что JUST справляется с NOV, поэтому еще 22 предложения WHEN должны быть закодированы для всех месяцев). Это приводит к: -

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...