问题:
如何使用时间(或以tz为时间)作为基础来制作自定义范围类型? 到目前为止我所拥有的:
create time timerange as range (
subtype = time,
subtype_diff = ??? )
我认为subtype_diff需要一个函数。对于pg中的时间类型,减函数(差异)应该有效,但我似乎无法找到描述正确语法的文档。
背景:
我正在尝试制作一个计划应用程序,服务供应商可以在一天中的不同时间显示其可用性和费用,客户可以实时查看价格和预订。服务供应商需要能够为不同的日期或时间设置不同的价格。例如,管道工可能想要一个小时的访问:
为了支持这一点,我正在研究的解决方案如下(任何关于如何更好地采取这种方式的想法)
我想制作一个包含' fee_rules'的表格。我希望能够查找给定的日期,时间和持续时间,并能够根据基于范围的一组费用规则检查相关费用。我建议的表架构:
费用规则的一个例子如下:
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
周一')并根据建议访问的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]
答案 0 :(得分:3)
per @a_horse_with_no_name和@pozs &#34;我认为你不需要subtype_diff&#34;:
create type timerange as range (subtype = time);
create table schedule
(
id integer not null primary key,
time_range timerange
);
insert into schedule
values
(1, timerange(time '08:00', time '10:00', '[]')),
(2, timerange(time '10:00', time '12:00', '[]'));
select *
from schedule
where time_range @> time '09:00'