jquery - 如何查询数据库表中存储为 iCal RRULE 的定期约会?

标签 jquery sql sql-server icalendar rrule

如果我有一个包含以下列的约会表,我如何查询规则以提取在特定日期或两个日期之间发生的约会?

Appointments
------
id
name
dt_start
dt_end
rrule

例如,假设我有一个约会,从 2016 年 9 月 28 日开始,到 2017 年 4 月 28 日结束,并且每两周发生一次,从星期一、星期五到 2017 年 4 月 28 日。 以下是 RRule:

RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20170428T230000Z;BYDAY=MO,FR EXDATE:20170414T023000Z

因此,使用上面的示例,上述约会发生的一些日期将包括以下内容:

2016-09-30 FRI
2016-10-10 MO
2016-10-14 FRI
2016-10-24 MO

现在如何使用 SQL 或任何其他方法查询此表以提取 2016 年 10 月 10 日发生的所有约会?

根据记录,这将在 C# asp.net 和 SQL Server 中完成。是否有 C# 或 SQL Server 库可用于解析和查询 rrule?

我看过ICAL.net但似乎没有太多关于它的文档,或者我如何将它用于上述目的。

有人有使用 ICAL.net 的经验吗?

最佳答案

Does any one have any experience with ICAL.net?

不是,但我是 php-rrule 的作者我认为我的答案也适用于您的情况。

首先我们要说的是,除非您有一组非常有限的规则,并且您知道,例如,没有事件永远不会是无限的,或者重复超过 X 次或其他什么,否则在存储之前扩展规则是不会发生的去工作。

据我所知,你不能只用SQL来完成,你必须分两步完成。

  1. 查询dt_start为2016-10-10之前,dt_end为2016-10-10之后的所有事件。
  2. 丢弃所有因规则而不会在 2016 年 10 月 10 日发生的事件(例如 BYDAY)。为此,您需要一个可以快速计算 rrule 字段中出现次数的库(我猜是 ICAL.net)。

我建议您在完成此操作后缓存结果,因此对于任何后续查询,您将能够读取 2016 年 10 月 10 日的缓存,而不用再次进行计算。每当添加、更新或删除 dt_startdt_end 之间包含 2016-10-10 的事件时,您都必须注意使缓存失效。

关于jquery - 如何查询数据库表中存储为 iCal RRULE 的定期约会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754097/

相关文章:

javascript - 脚本在 Chrome 和 IE 上无法正常工作

mysql - SQL - 如果列条目等于 NULL,则将其设置为 0?

php - 简单的应用程序 php ajax 不工作

javascript - jQuery 停止执行直到事件被调度

sql - 面试问题: SQL recursion in one statement

c# - SQL在C#中从DB获取实数到Double时添加随机小数点

sql-server - SQL Server Management Studio - 保存加密的连接字符串

c# - 这个关于查找丢失的键的查询可以改进吗? (SQL 或 LINQ)

c# - 无法在 SQL c# 中更新表

javascript - 使用 jQuery append() 删除 append 的 div