- 问题:**
如何使用时间(或带有tz的时间)作为基础创建自定义范围类型?目前为止我所拥有的:
create time timerange as range (
subtype = time,
subtype_diff = ??? )
我认为subtype_diff需要一个函数,对于pg中的时间类型,minus函数(difference)应该可以工作,但是我似乎找不到描述正确语法的文档。
- 背景:**
我正在尝试开发一个日程安排应用程序,服务供应商可以显示他们在一天中不同时间的可用性和费用,客户可以实时查看价格和预订。服务供应商需要能够为不同的日期或时间设置不同的价格。例如,一个水管工可能希望在一个小时的访问:
- 100美元星期一09:00 - 18:00
- 200美元星期一18时至22时
- 星期一500美元2200 - 0000
为了支持这一点,我正在研究的解决方案如下(任何关于更好的方法的想法都被感激地接收)
我想创建一个包含"fee_rules"的表。我希望能够查找给定的日期、时间和持续时间,并能够根据一组基于范围的费用规则检查相关费用。我建议的表架构:
- id序列
- 星期几整数[其中0 =星期日,1 =星期一..]
- time_range [我只想使用以下命令创建一个自定义时间范围
小时:分钟]
- 整数费用
- fee_schedule_id(外键)(对特定供应商的引用,该供应商是该特定费用规则的"所有者")
费用规则的示例如下:
id day_of_week time_range fee fee_schedule_id
12 01 10:00-18:00 100 543
对于给定的日期,我计划计算day_of_week(例如day_of_week=01
表示"Monday"),并根据计划访问的start_time和持续时间生成time_range,例如visit_range=10:00-11:00
。我希望能够使用postgresql的范围操作符进行搜索,例如:
select fee where day_of_week = '01' and visit_range <@ (range is contained by)time_range and fee_schedule_id = 543 [reference to the specific supplier's fees]
2条答案
按热度按时间3qpi33ja1#
根据@a_horse_with_no_name和@pozs“我认为您不需要子类型差异”:
kulphzqa2#
timerange的subtype_diff实际上是Postgres文档的一个示例(从9.5版本开始):