首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止向数据库插入重叠时间戳范围

防止向数据库插入重叠时间戳范围
EN

Stack Overflow用户
提问于 2020-09-01 21:38:32
回答 1查看 87关注 0票数 1

你好,希望有人能帮我。

让我们说,我的桌子上有以下几个

名称文本startTime时间戳没有时区,endTime时间戳没有时区

以下是我要做的事:

我试图检查即将添加到数据库中的时间是否会与表上的时间重叠。

样本:

代码语言:javascript
运行
复制
name            startTime               endTime
---------|------------------------|----------------------
tommy    |   2019-07-10 08:30:00  |   2019-07-10 10:30:00
tommy    |   2019-07-10 10:31:00  |   2019-07-10 11:30:00  
tommy    |   2019-07-10 07:30:00  |   2019-07-10 09:00:00 <=== if I click enter to enter this tird schedulle for this user, the sistem will give me a conflict message because this user already has a schedulle that start from 2019-07-10 08:30:00 to 2019-07-10 10:30:00 on our first row of the table.

至于我要在数据库中插入的代码,我所拥有的只是这个简单的php。

代码语言:javascript
运行
复制
$sql = "insert into horarios (name, startTime, endTime) values ('$name', '$startTime', '$endTime');";
$res = @pg_query ($con, $sql);
if ($res == NULL){
    echo "Query failed.";
    exit (0);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 21:44:02

让数据库做繁重的工作吧!可以使用时间戳范围排除约束来防止插入重叠日期范围:

代码语言:javascript
运行
复制
alter table horarios
    add constraint horarios_range_overlap
    exclude using gist (tsrange(startTime, endTime) with &&)

数据库使用时间戳作为边界来构建The范围,然后使用操作符&&确保没有重叠。相互冲突的记录被拒绝。

默认情况下,时间戳范围包含在下限上,而在上限处是排他性的,但这可以修改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63695789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档