Подтвердить что ты не робот

Каков наилучший способ представления временного интервала в SQL Server CE?

В частности, мне нужны только часы: минуты, но скажу, что у меня есть объект .NET TimeSpan, как я должен хранить это в базе данных SQL (CE)?

4b9b3361

Ответ 1

Я бы рекомендовал использовать long для представления числа ticks. То, что TimeSpan использует как внутреннее представление. Это позволяет легко восстановить объект с помощью метода Timespan.FromTicks() и выводить его в базу данных с помощью свойство Timespan.Ticks. Наименьшей единицей времени в .NET является галочка, которая равна 100 наносекундам.

Ответ 2

SQL CE не имеет типа времени или определяемых пользователем типов, поэтому ваши варианты - это datetime или int, представляющие минуты. Если самое большое время, которое вам нужно сохранить, равно 23:59 = 23 * 60 + 59 = 1439 = количество минут в день, начиная с минуты 0, малый тон является наименьшим интегральным типом, который будет соответствовать этому диапазону.

Сопротивляйтесь соблазну хранить часы и минуты в отдельных столбцах как tinyints. Это будет использовать одно и то же пространство, как и один маленький интервал, но тогда каждый расчет времени потребует умножения часов на 60 и добавления минут, а для каждого order by потребуются два столбца вместо одного.

Сохранить как минуты; на дисплее, вы можете разделить минуты на часы и минуты с помощью

select floor( absminutes / 60 ) as hours, absminutes % 60 as minutes,
from some table
order by absminutes; 

Я бы назвал столбец minutes или absminutes (для абсолютных минут), если вы хотите отличить 1439 минут в день от 0-59 минут в час.

Чтобы преобразовать из значения базы данных в объект Timespan, используйте ctor Timespan(int, int, int), как этот new TimeSpan( floor(absminutes / 60 ), absminutes % 60, 0) или (лучше) ctor Timespan(long) с new Timespan( absminutes * TimeSpan.TicksPerMinute ).

Чтобы вставить или обновить базу данных из объекта Timespan, установите absminutes на someTimespan.TotalMinutes % 1440.

Ответ 3

Храните как varchar. Сохраните в sql с помощью TimeSpan.ToString(). Читайте из sql как:

TimeSpanObj = TimeSpan.Parse(fieldValue)

Ответ 4

В настоящее время я рассматриваю возможность использования SQL-времени для обработки, но он не будет работать в течение >= 24 часа.

Преимущества включают легко читаемые, легко используемые в SQL и в коде, но падение состоит в том, что у вас есть только небольшой промежуток времени для воспроизведения.

declare @delay table (DelayTime Time(3))
insert into @delay values ('00:10:00.000')
select getdate() as nowtime, getdate()+DelayTime as nowPlusTen from @delay

и

SqlDataReader dr = cmd.ExecuteReader();
DelayTime = (TimeSpan) dr["DelayTime"];