Создать отметку времени в браузере базы данных SQLite - PullRequest
0 голосов
/ 10 октября 2018

Я использую DB Browser для SQLite, и я новичок в этом только сейчас.Я ищу атрибут типа метки времени.Реальна ли временная метка другими словами?

enter image description here

Я отредактировал тип, а также его сэр по умолчанию.это правильно?

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

SQLite имеет двуязычный / гибкий тип, который, за исключением псевдонима столбца rowid (INTEGER PRIMARY KEY (с или без AUTOINCREMENT)) или rowid сам столбец, позволяет любому столбцу хранить данные любого типа хранилища (TEXT, INTEGER, REAL, NULL или BLOB).

Когда столбец определен, тип столбца преобразуется в один из 5 типов столбцов (сходство столбцов)) в соответствии с набором правил (см. ссылку ниже),

, например, даже ..(mycolumn Rumplestilskin) действителен, поскольку разрешается до сходства типов NUMERIC * (правило 5 - правила см. ниже),DECIMAL, DECIMAL(10,5) также раскрываются до правила 5 и, следовательно, приводят к сходству типов ** NUMERIC .

Выше приведен обзор типов данных в SQLite версии 3

Таким образом, за исключением случаев, когда рассматривается влияние, которое сходство типов оказывает на данные при извлечении, тип столбцана самом деле не фактор.

Важно то, какие именно данные вы храните.

В случае дат / временных отметок, вероятно, будет лучше сохранить данные как одну из принятых строк времени: -

Строка времени может быть в любомследующих форматов:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

В форматах с 5 по 7 буква «T» представляет собой буквенный символ, разделяющий дату и время, как того требует ISO-8601.

Форматы с 8 по 10, которые указывают только время, предполагающее дату 2000-01-01.

Формат 11, строка 'now', преобразуется в текущую дату и время, полученные из метода xCurrentTime используемого объекта sqlite3_vfs.Аргумент «сейчас» для функций даты и времени всегда возвращает одно и то же значение для нескольких вызовов в рамках одного вызова sqlite3_step ().Всемирное координированное время (UTC).

Формат 12 - это число юлианского дня, выраженное в виде значения с плавающей запятой.

За форматами со 2 по 10 необязательно может следовать указатель часового пояса в форме "[+ -] ЧЧ: ММ"или просто "Z".Функции даты и времени внутренне используют время UTC или «зулу», поэтому суффикс «Z» не используется.Любой ненулевой суффикс "ЧЧ: ММ" вычитается из указанной даты и времени для вычисления времени зулуса.Например, все следующие временные строки эквивалентны:

2013-10-07 08:23:19.120
2013-10-07T08:23:19.120Z
2013-10-07 04:23:19.120-04:00
2456572.84952685 

В форматах 4, 7 и 10 значение дробных секунд SS.SSS может иметь одну или несколько цифр после десятичной точки.Точно три цифры показаны в примерах, потому что только первые три цифры имеют значение для результата, но входная строка может иметь меньше или больше трех цифр, и функции даты / времени все равно будут работать правильно.

Аналогично, формат 12 показывается с 10 значащими цифрами, но функции даты / времени действительно принимают столько цифр, сколько необходимо для представления номера дня в Юлиане.

Строки времени

Ссылка также сразу включает функции даты / времени и примеры их использования.

Примите во внимание следующее: -

DROP TABLE IF EXISTS savetimestamps;
CREATE TABLE IF NOT EXISTS savetimestamps (
  name TEXT,
    ts01 rumplestiltskin DEFAULT CURRENT_TIMESTAMP, 
    ts02 INTEGER DEFAULT CURRENT_TIMESTAMP,
    ts03 myreallybigintbutrealllyitisjustandint DEFAULT CURRENT_TIMESTAMP,
    ts04 BLOB DEFAULT CURRENT_TIMESTAMP,
    ts05 REAL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO savetimestamps (name) VALUES('A');
INSERT INTO savetimestamps VALUES(1,'a',3.725,4,5,x'010203040506070809'); -- useless/confusing data
SELECT *,
    rowid AS id,
    STRFTIME('%d %M %Y', ts01) AS t1,
    STRFTIME('%d %M %Y', ts02, '-1 DAYS') AS t2,
    STRFTIME('%d %M %Y', ts03, '-2 DAYS') AS t3,
    STRFTIME('%d %M %Y', ts04, '-3 DAYS') AS t4,
    STRFTIME('%d %M %Y', ts05, '-4 DAYS') AS t5
FROM savetimestamps;
SELECT
    name,typeof(ts01),typeof(ts02),typeof(ts03),typeof(ts04),typeof(ts05)
FROM savetimestamps;

Это создает таблицу с 6 столбцами или различными типами связей столбцов (TEXT, NUMERIC (правило 5) INTEGER, INTEGER (правило 1, поскольку оно содержит int), BLOB и REAL).

Последние 5 столбцов имеютзначение по умолчанию для текущей метки времени, поэтому отсутствие значения приводит к тому, что SQLite вставляет текущую метку времени.

2 строки вставляются в первую строку, соответствующую предполагаемому использованию таблиц, т. е. текстовое значение в столбце имени, а метки времени воставшиеся 5. Однако 2-я строка представляет собой данные для мусора для демонстрации.

2 запускаются первые запросы, отображающие сохраненные данные, а также некоторые столбцыmns, используя функцию strftime для постепенного отображения предыдущего дня.

Второй запрос отображает типы столбцов.

Результаты: -

enter image description here

enter image description here

  • Обратите внимание на 2-ю строку, как типы столбцов различаются в столбце, поэтому каждый столбец / строка имеет свой собственный определенный тип в соответствии с тем, как хранятся данные.

Какобзор Типы данных SQLite являются гибкими, но в результате могут сбивать с толку, особенно если вы пришли из статического типа данных фона.

0 голосов
/ 10 октября 2018

Поскольку временная метка обычно представлена ​​значением Long, INTEGER подходит для ее хранения в базе данных.

...