ghu*_*yed 4 postgresql types date range
问题:
如何使用时间(或带 tz 的时间)作为基础创建自定义范围类型?到目前为止我所拥有的:
create time timerange as range (
subtype = time,
subtype_diff = ??? )
Run Code Online (Sandbox Code Playgroud)
我认为 subtype_diff 需要一个函数。对于 pg 中的时间类型,减号函数(差异)应该可以工作,但我似乎找不到描述正确语法的文档。
背景:
我正在尝试制作一个日程安排应用程序,服务提供商可以在其中显示一天中不同时间的可用性和费用,并且客户可以实时查看价格和预订。服务提供商需要能够为不同的日期或一天中的不同时间设置不同的价格。例如,管道工可能想要一小时的访问:
为了支持这一点,我正在研究的解决方案如下(非常感谢任何关于更好的方法的想法)
我想制作一个包含“fee_rules”的表。我希望能够查找给定的日期、时间和持续时间,并能够根据一组基于范围的费用规则检查相关费用。我建议的表架构:
费用规则的示例如下:
id day_of_week time_range fee fee_schedule_id
12 01 10:00-18:00 100 543
Run Code Online (Sandbox Code Playgroud)
对于给定的日期,我计划计算 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]
Run Code Online (Sandbox Code Playgroud)
根据 @a_horse_with_no_name 和 @pozs “我认为你不需要 subtype_diff”:
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'
Run Code Online (Sandbox Code Playgroud)