Реализация (дата - время дельта) в SQL Server 2008 - PullRequest
2 голосов
/ 09 августа 2010

Я хочу иметь возможность отправлять напоминания о встречах. Учитывая таблицы:

- Appointment
  ID (PK)
  Start

- Reminder
  AppointmentID (FK)
  MinutesBeforeAppointmentToSendReminder -- only need minute resolution

Я бы хотел выбрать время напоминания:

select ..., DateAdd(minutes, -Reminder.MinutesBeforeAppointmentToSendReminder, Appointment.Start) as ReminderTime
from Appointment join Reminder
  on (Appointment.ID = Reminder.AppointmentID)
where (...)

Платформа базы данных - SQL Server 2008. LinqToSql будет использоваться для доступа к базе данных.

В SQL Server 2008 существует множество типов и функций даты / времени. Какие типы типов лучше всего использовать для Start и MinutesBeforeAppointmentToSendReminder. Какую функцию даты лучше всего использовать? [то есть «лучший», учитывая производительность, удобство и мобильность]

(планировал DateTime, int, DateAdd)

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Если вам нужно разрешить только до минуты, используйте smalldatetime, а не datetime.

Для различий я бы предложил smallint, который дает вам 32 тыс. Минут, и DATEADD, которые сохраняют вычисления в домене типа date / stime

1 голос
/ 09 августа 2010

Использовать dateadd.

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

Ваши вопросы по заявке - как далеко вы отправляете свои напоминания? Вы можете использовать целые числа или tinyints , если ваш лимит составляет 4 часа. Стандартный DateTime, вероятно, достаточно для вашей даты начала; если вам не нужна поддержка часового пояса, в этом случае datetimeoffset может быть более подходящим.

...