- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我正在维护一个事件数据库,它可以是从企业营业时间的每周时间表(周一至周五:上午 10 点至晚上 7 点,周六:中午 12 点至下午 6 点,周日:休息)到每月事件 (艺术博览会,每个第一个星期六,上午 10 点至下午 5 点)到年度事件(平安夜慈善晚宴,晚上 7 点至晚上 9 点)
在理想情况下,我想在任何一天查询数据库,比如:2012 年 1 月 12 日,星期四,中午 12 点
...并查找发生在以下时间的所有事件:
我想如果不首先考虑如何将此类日期/时间存储在数据库中,就没有必要讨论查询构造。
我想不出如何在单条记录、单个字段中对每周正常工作时间(甚至忽略边缘情况)的概念进行建模,同时对每年一次的事件进行建模。至少,我似乎至少需要五个字段:
而且我猜没有办法将其封装在一行中,对吧?例如,一家每个工作日营业的企业将有 5 条记录。
最终目标是能够进行一个相对优雅的查询,该查询可以找到在其时间范围内包含给定时刻的所有事件记录。
最佳答案
不确定您是否专门要求与 dbms 无关的解决方案,无论如何在 postgresql 中(我认为在大多数 RDBMS 中都是可能的)您可以存储时间戳并从中获取大量信息:http://www.postgresql.org/docs/8.4/interactive/functions-datetime.html .
Postgresql 特定的答案
9.9.1. EXTRACT, date_part
EXTRACT(field FROM source) The extract function retrieves subfields such as year or hour from date/time values. source must be a value expression of type timestamp, time, or interval. (Expressions of type date are cast to timestamp and can therefore be used as well.) field is an identifier or string that selects what field to extract from the source value. The extract function returns values of type double precision. The following are valid field names: [...] day, DOW (day of week), DOY (day of year), [...]
例如,要选择每个第二个星期四发生的事件,您可以这样写:
SELECT * FROM events #your table
WHERE EXTRACT(DOW FROM date_column)=4 # DOW goes from sunday (0) to saturday (6)
AND EXTRACT(DAY FROM date_column)>7 # must occurr after 7th day of the month (ie. if the 1st is a Thursday
AND EXTRACT(DAY FROM date_column)<15 # and before the 15th (ie. if the 1st is a Friday, so the first Thursday is on the 7th, and the second is on the 14th)
要为持续时间建模,您可能只有 2 个时间戳字段,用于事件的开始/结束。
另请注意,您可以添加或减去时间戳,以及了解时间间隔是否重叠。
一般,我会首先尝试使用您的 DBMS 提供的数据类型和函数,只有当您真的找不到解决方案时才尝试自己建模。
关于algorithm - 在数据库中,如何存储事件发生日期和时间范围以进行快速/优雅查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8863525/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!