2010-08-09 4 views
2

Je souhaite être en mesure d'envoyer des rappels pour les rendez-vous. Compte tenu des tables:Implémentation (Date-Heure Delta) dans SQL Server 2008

- Appointment 
    ID (PK) 
    Start 

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

Je voudrais sélectionner les temps de rappel:

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

La plate-forme de base de données est SQL Server 2008. LinqToSql sera utilisé pour accéder à la base de données.

Il existe un grand nombre de types et de fonctions de date/heure dans SQL Server 2008. Quels sont les meilleurs types à utiliser pour Start et MinutesBeforeAppointmentToSendReminder. Quelle est la meilleure fonction de date à utiliser? [À savoir, "meilleur" compte tenu de la performance, la commodité et la portabilité]

(planifiait sur DateTime, int, DateAdd)

Répondre

1

Si vous devez résoudre uniquement à la minute, utilisez smalldatetime et non datetime. Pour les différences, je suggère smallint qui vous donne 32k minutes et DATEADD qui gardent le calcul dans le domaine de type date/stime

1

Utilisez dateadd.

Il est plus rapide et plus agréable à lire que de convertir les nombres entre dates et flottants et de faire les calculs sur les valeurs de date brutes. Vos questions sur l'application - combien de temps en avance envoyez-vous vos rappels? Vous pouvez utiliser ints ou tinyints si 4 heures est votre limite. DateTime standard est assez probable pour votre date de début; sauf si vous avez besoin d'un support de fuseau horaire, auquel cas datetimeoffset pourrait être plus approprié.