C# 在SQLServer2008中实现(日期-时间增量)

C# 在SQLServer2008中实现(日期-时间增量),c#,sql,sql-server,linq-to-sql,sql-server-2008,C#,Sql,Sql Server,Linq To Sql,Sql Server 2008,我希望能够发送约会提醒。根据表格: - Appointment ID (PK) Start - Reminder AppointmentID (FK) MinutesBeforeAppointmentToSendReminder -- only need minute resolution 我想选择提醒时间: select ..., DateAdd(minutes, -Reminder.MinutesBeforeAppointmentToSendReminder, Appoi

我希望能够发送约会提醒。根据表格:

- 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将用于访问数据库

SQLServer2008中有大量的日期/时间类型和函数。“开始”和“约会前分钟”的最佳类型是什么。什么是最好的日期函数?[即,考虑到性能、方便性和可移植性,“最佳”]

(计划在DateTime、int、DateAdd上)

使用DateAdd

它比在日期时间和浮点数之间转换数字以及对原始日期值进行数学运算更快、更好


您的申请问题-您提前多长时间发送提醒?如果4小时是您的限制,您可以使用ints。标准日期时间可能足以满足您的开始日期;除非您需要时区支持,否则在这种情况下可能更合适。

如果您只需要解析到分钟,请使用smalldatetime而不是datetime

对于不同之处,我建议使用smallint,它为您提供32k分钟的时间,DATEADD将计算保留在date/stime类型的域中