例如我有数据库允许的范围 - (08:00-12:00),(12:00-15:00)和请求范围我想测试 - (09:00-14:00)。有什么方法可以理解我的测试范围包含在数据库的允许范围内。它可以被分割成更多的部分,我只想知道我的范围是否完全适合数据库中的时间范围列表。有什么办法可以匹配多个日期范围以包含在postgresql中的其他多个范围
0
A
回答
0
你不提供表结构,所以我不知道数据类型。让我们假设那些文字:
t=# select '(8:00, 12:30)' a,'(12:00, 15:00)' b,'(09:00, 14:00)' c;
a | b | c
---------------+----------------+----------------
(8:00, 12:30) | (12:00, 15:00) | (09:00, 14:00)
(1 row)
,那么你如何能做到这一点:
t=# \x
Expanded display is on.
t=# with d(a,b,c) as (values('(8:00, 12:30)','(12:00, 15:00)','(09:00, 14:00)'))
, w as (select '2017-01-01 ' h)
, timerange as (
select
tsrange(concat(w.h,split_part(substr(a,2),',',1))::timestamp,concat(w.h,split_part(a,',',2))::timestamp) ta
, tsrange(concat(w.h,split_part(substr(b,2),',',1))::timestamp,concat(w.h,split_part(b,',',2))::timestamp) tb
, tsrange(concat(w.h,split_part(substr(c,2),',',1))::timestamp,concat(w.h,split_part(c,',',2))::timestamp) tc
from w
join d on true
)
select *, ta + tb glued, tc <@ ta + tb fits from timerange;
-[ RECORD 1 ]----------------------------------------
ta | ["2017-01-01 08:00:00","2017-01-01 12:30:00")
tb | ["2017-01-01 12:00:00","2017-01-01 15:00:00")
tc | ["2017-01-01 09:00:00","2017-01-01 14:00:00")
glued | ["2017-01-01 08:00:00","2017-01-01 15:00:00")
fits | t
首先你需要以“铸造”你的时间戳记,存在的Postgres没有TIMERANGE,因此,我们采取所有时间都在同一天(w.h = 2017-01-01
),并将a,b,c转换为ta,tb,tc,默认包括括号(这完全符合我们的情况)。
然后使用union
https://www.postgresql.org/docs/current/static/functions-range.html#RANGE-FUNCTIONS-TABLE操作得到“胶合”间隔
最后检查范围由较大的一个与操作者<@
包含
+0
“*因为在postgres *中没有时间范围”,但是您可以非常容易地创建一个:'创建类型时间范围作为范围(子类型=时间);' –
+0
@a_horse_with_no_name谢谢 - 我将根据您建议的更新版本更新答案了解表格结构和来自OP的清晰样本 –
相关问题
- 1. PostgreSQL多个日期范围的价格
- 2. ActiveRecord多个日期范围
- 3. 多个日期范围
- 4. MongoDB的汇聚 - 按日期范围,其中一个文件可以属于多个范围
- 5. 在多个日期范围内的开始日期和结束日期范围
- 6. 查询中的多个日期范围
- 7. PostgreSQL中的日期范围
- 8. NSRange变量是否可以包含多个范围?
- 9. 有没有什么办法可以在npm中的范围包中搜索?
- 10. 在日期范围范围
- 11. sed多行范围匹配
- 12. PostgreSQL的日期范围
- 13. PostgreSQL:如何获得包含结束日期的日期范围?
- 14. SSRS 2008 - 多个分组日期范围
- 15. Lucene日期范围与多个发生
- 16. SQL查询 - 多个日期范围
- 17. 查看日期范围与某些其他日期范围的缺失日期
- 18. PostgreSQL日期范围查询
- 19. 在日期范围内有多少Januarys
- 20. 有什么办法可以禁用var范围?
- 21. 在范围Countif日期超过其他范围内的日期excell 2013
- 22. Kotlin中有没有什么方法可以将一个值从一个范围转换为另一个范围?
- 23. 一个范围可以在Scala中匹配吗?
- 24. 匹配日期范围的字典键
- 25. 日期范围的索引/匹配
- 26. 圆形范围内的匹配日期
- 27. Jquery Datepicker在一个日历中选择多个日期范围
- 28. 重复查询其在日期范围返回多个列的PostgreSQL
- 29. 将日期范围和时间范围组合到一组结果中,该结果包含日期范围中包含的每一天的时间范围SQL
- 30. MS-Access包含日期范围查询中的所有日期
我的测试范围可以是(09:00-10:00) ,(10:00,14:00) –
请** [编辑] **您的问题,并根据该数据添加一些示例数据和预期输出。 [**格式化文本**](http://stackoverflow.com/help/formatting)请,[**没有屏幕截图**](http://meta.stackoverflow.com/questions/285551/why-may -i-不上传图像-的代码上那么当灰化-A-问题/ 285557#285557)。 ** [**]您的问题 - 请勿**在论坛中发布代码或其他信息。 –