在SQL Server 2008中实现(日期 - 时间增量)

时间:2010-08-09 06:24:11

标签: 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, 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 个答案:

答案 0 :(得分:1)

使用dateadd。

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

您的申请问题 - 您提前多久发送提醒?如果4小时是您的限制,您可以使用整数或tinyints。标准日期时间可能足以满足您的开始日期;除非您需要时区支持,否则datetimeoffset可能更合适。

答案 1 :(得分:1)

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

对于差异,我建议smallint给你32k分钟和DATEADD,它在日期/ stime-type域中保持计算