代码之家  ›  专栏  ›  技术社区  ›  Rob

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

  •  2
  • Rob  · 技术社区  · 15 年前

    我想为约会发送提醒。根据表格:

    - 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中有大量日期/时间类型和函数。在约会到结束提醒之前,最适合用于开始和分钟的类型是什么。要使用的最佳日期函数是什么?[即,考虑到性能、便利性和可移植性,“最佳”]

    (正在计划datetime、int、dateadd)

    2 回复  |  直到 15 年前
        1
  •  1
  •   gbn    15 年前

    如果只需要解析为分钟,那么使用smalldatetime而不是datetime。

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

        2
  •  1
  •   u07ch    15 年前

    使用DATEADD。

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

    您的申请问题-您提前多久发送提醒?您可以使用ints或 tinyints 如果你不能超过4小时。标准日期时间很可能足以满足您的开始日期;除非您在这种情况下需要时区支持 datetimeoffset 可能更合适。