В компании, в которой я работаю, значения даты и времени всегда сохранялись отдельно в целочисленных полях, поэтому, например, 8:30 сегодня утром будет храниться так:
- дата 20091116 и
- время 83000 (без начальных нулей, так как это целочисленное поле)
В то время как время, когда я набираю это время, будет храниться как это
- дата 20091116
- время 133740
К сожалению, если я захочу добавить BETWEEN к предложению WHERE запроса, это приведет к небольшому усложнению.
В настоящее время система, над которой я работаю, использует запрос примерно так:
declare @minDate int, @minTime int, @maxDate int, @maxTime int
select @minDate = 20091102
select @minTime = 64841
select @maxDate = 20091105
select @maxTime = 102227
SELECT *
FROM transactions
WHERE
(
(
txnDate = @minDate AND
txnTime >= @minTime
) OR
txnDate > @minDate
) AND
(
(
txnDate = @maxDate AND
txnTime <= @maxTime
) OR
txnDate < @maxDate
)
Учитывая, что я не могу изменить дизайн базы данных ...
Есть ли лучший способ сделать это?