Я хочу создать поле в SQLite DB (используя C#) для хранения поля времени (продолжительности). Значение будет в формате hr:min:sec
, например '10:10:00'
, что означает 10 часов, 10 мин и 00 секунд. Какой тип данных я должен использовать для этого? Я знаю, что DateTime
не будет адекватным, так как он используется для хранения даты-времени.Какой тип данных использовать для хранения поля TimeTaken в SQLIte?
ответ
Используйте TimeSpan
в C#. Это предназначено для представления истекшей продолжительности времени, которую вы описываете.
В SQLite вы должны сохранить тип INTEGER
, чтобы ваши данные были сортируемыми. Вам просто нужно решить, какая гранулярность вам нужна.
Например, вы можете сохранить TimeSpan.Ticks
, если вам нужна абсолютная точность. Для этого вам понадобится INTEGER
из 8 байтов. При загрузке вы можете использовать либо TimeSpan.FromTicks
, либо конструктор new TimeSpan(ticks)
.
Скорее всего, вы захотите сохранить целые количества секунд, которые вы можете получить от TimeSpan.TotalSeconds
. Вы могли бы использовать для этого INTEGER
из 4 байтов. При загрузке вы можете использовать TimeSpan.FromSeconds
, чтобы воссоздать временной интервал из вашего целого.
DateTime
или TimeSpan
было бы более чем достаточно, но SQLite не поддерживает их.
В SQLite, возможные типы данных TEXT
, INTEGER
, REAL
и BLOB
(эквивалент .NET String
, Int64
, Double
и Byte
массив соответственно).
Все, что вам нужно сделать, это манипулировать вашим C# DateTime
или TimeSpan
предпочтительным типом данных SQLite.
SQLite может hasle 'DateTime' хорошо, как строка, целое или реальное, в зависимости от' DateTimeFormat', указанного в строке соединения. К сожалению, он не может обрабатывать «TimeSpan» вообще. – xmedeko
Я думаю, что ответ @Matt Johnson является самым дополнительным, однако я вышел с другим подходом. В моем случае проблема была немного иной. Я должен был хранить оговорки для ресторана, среди других, я имел эти 2 поля:
DateTime StartDateTime
TimeSpan Продолжительность
Поскольку вы не можете хранить TimeSpan в Sqlite I создайте имя столбца EndDateTime типа DateTime. Итак, продолжительность - это разница между EndDateTime и StartDateTime, например:
StartDateTime = reader.GetDateTime(5);
Duration = reader.GetDateTime(6).Subtract(StartDateTime);
Вы должны добавить тег C# на свой вопрос. –