Postgres提供了一个很好的功能叫做范围类型,它提供了有用的范围功能(重叠、包含等)。
我想使用
我认为这是错误的默认选择。我无法想象在现实生活中有任何应用或参考会假定日期范围的结束日期是被排除在外的。至少在我的经验中没有。
我想实现一个包含下限和上限的日期范围类型,但我遇到了Postgres文档难题:关于如何创建新的离散范围类型的参考资料很晦涩,并且缺乏任何示例(从文档中获取:创建规范函数有点棘手,因为必须在声明范围类型之前定义它)。
有人能提供一些帮助吗?甚至直接提供实现本身;它应该是5-10行代码,但将这些5-10行代码组合起来需要进行严肃的研究。
编辑:澄清:我正在寻找有关如何创建正确类型的信息,以便插入
我想使用
daterange
类型,但是我认为该类型的实现选择有些笨拙:日期范围的上限是排除在外的。这意味着如果我将值定义为2014/01/01 - 2014/01/31
,则显示为[2014/01/01, 2014/01/31)
,1月31日被排除在范围之外!我认为这是错误的默认选择。我无法想象在现实生活中有任何应用或参考会假定日期范围的结束日期是被排除在外的。至少在我的经验中没有。
我想实现一个包含下限和上限的日期范围类型,但我遇到了Postgres文档难题:关于如何创建新的离散范围类型的参考资料很晦涩,并且缺乏任何示例(从文档中获取:创建规范函数有点棘手,因为必须在声明范围类型之前定义它)。
有人能提供一些帮助吗?甚至直接提供实现本身;它应该是5-10行代码,但将这些5-10行代码组合起来需要进行严肃的研究。
编辑:澄清:我正在寻找有关如何创建正确类型的信息,以便插入
[2014/01/01,2014/01/31]
导致upper(daterange) ='2014/01/31'
。使用现有的daterange类型,此值被“转换”为 [2014/01/01,2014/02/01)
并给出upper(daterange) ='2014/02/01'
[)
。如果您需要呈现[A,B]
,请在向用户呈现之前处理该值。 - Matthew Schinckel[)
,而是任何您希望的形式。我正在寻找可以缓解我的应用程序需要执行该处理的类型,现在我必须在查询和插入数据时都执行它。 - dtheodor