如何在MySQL Select查询中获取时间范围

发布于 2024-11-05 10:15:37 字数 905 浏览 0 评论 0原文

我正在处理一个我无法处理的问题。 比方说,我通过一个简单的 MySQL Select 查询获得结果:

SELECT date_from.rights, date_to.rights FROM rights

rights 保留描述用户需要访问的系统权限的记录。

权限受时间值限制,显然是 FROM 和 TO。如果 date_fromdate_to 为 NULL,则权限不受限制(时间方面)。

表 Rights 包含以下数据:

date_from 。 。 。 。 。 。 。 。 。 date_to

2011-05-20 。 。 。 。 。 。 。 。 。 2011-08-20
2011-06-20 . 。 。 。 。 。 。 。 。空
2011-03-20 . 。 。 。 。 。 。 。 。 2011-04-20
无效的 .. 。 。 。 。 。 。 。 。 。 。 。 。 2011-01-20

我真正需要通过 SELECT 查询得到的是:

date_from 。 。 。 。 。 。 。 。 。 date_to

2011-05-20 。 。 。 。 。 。 。 。 。空
2011年3月20日。 。 。 。 。 。 。 。 2011-04-20
无效的 .. 。 。 。 。 。 。 。 。 。 。 。 。 2011-01-20

希望您明白我的意思。我只需要对结果进行分组,以便在每个日期值相交的情况下获得尽可能广泛的限时权限;)

我认为,GROUP BY 子句应该可以完成这项工作,但我只是找不到正确的公式。如果可能的话,我也想避免程序。

I'm dealing with a problem I just can't get on with.
Let's say, I get results with a simple MySQL Select query:

SELECT date_from.rights, date_to.rights FROM rights

Table rights keeps records describing users' permissions of the system that they need to access.

The permissions are limited by time values, obviously FROM and TO. If date_from or date_to is NULL, permission is unlimited (time-wise).

The table rights contains the following data:

date_from . . . . . . . . . date_to

2011-05-20 . . . . . . . . . 2011-08-20
2011-06-20 . . . . . . . . . NULL
2011-03-20 . . . . . . . . . 2011-04-20
NULL .. . . . . . . . . . . . . 2011-01-20

What I realy need to get with a SELECT query is:

date_from . . . . . . . . . date_to

2011-05-20 . . . . . . . . . NULL
2011-03-20 . . . . . . . . . 2011-04-20
NULL .. . . . . . . . . . . . . 2011-01-20

Hope You get what I mean by all this. I just need to GROUP results in order to get as wide range of time-limited permissions as possible where every single date value intersect ;)

I think, GROUP BY clause should do the job, but I just can't find the right formula. Also I would like to avoid Procedures, if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

得不到的就毁灭 2024-11-12 10:15:37

我想这就是您正在寻找的:

select *
from rights
where (date_from is null or date_from <= now())
and (date_to is null or date_to >= now())

祝您好运。

I think this is what you're looking for:

select *
from rights
where (date_from is null or date_from <= now())
and (date_to is null or date_to >= now())

Good luck.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文