首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MYSQL / SQL在两个日期之间进行搜索?

使用MYSQL / SQL在两个日期之间进行搜索?
EN

Stack Overflow用户
提问于 2016-04-17 17:45:54
回答 3查看 155关注 0票数 2

我有一个是clientbike的桌子

从客户端自行车中选择stime、etime

代码语言:javascript
复制
    stime       |  etime 
    --------------------------
    2016-04-01  |  2016-04-30

如果有人搜索stime = 2016-04-05 & etime = 2016-04-07

找到结果

代码语言:javascript
复制
    2 Days... 

有人能解释一下如何使用sql / mysql吗?

技术

EN

Stack Overflow用户

发布于 2016-04-18 03:25:30

如果我理解正确的话,您想要的是重叠天数,其中EndDate是独占的。如果这是正确的,那么从这个开始:

代码语言:javascript
复制
SELECT *
FROM clientbike
WHERE stime <= @ToDate
    AND etime >= @FromDate;

此查询将返回clientbike中与搜索日期重叠的任何记录。以这种方式构造WHERE子句将检查sdateedate之间是否存在start this、end this、@ToDate@FromDate,以及sdateedate是否位于@ToDate@FromDate之间。

接下来,我们需要修改SELECT

代码语言:javascript
复制
SELECT GREATEST(stime, @FromDate) AS startDate,
    LEAST(etime, @ToDate) AS endDate
FROM clientbike
WHERE stime <= @ToDate
    AND etime >= @FromDate;

GREATESTLEAST的要点是确保我们只查看实际重叠的日期。例如:如果是stime = '2016-04-15'@FromDate = '2016-04-22',则为GREATEST(stime, @FromDate) = '2016-04-22'。然后,我们将使用这两个字段来计算startDateendDate之间的日期差异

代码语言:javascript
复制
SELECT GREATEST(stime, @FromDate) AS startDate,
    LEAST(etime, @ToDate) AS endDate, 
    DATEDIFF(LEAST(etime, @ToDate), GREATEST(stime, @FromDate)) as overlap
FROM clientbike
WHERE stime <= @ToDate
    AND etime >= @FromDate;

SELECT中唯一重要的部分是DATEDIFF()函数,因此可以删除前面的两个字段。我只是把它们留在里面,这样你就可以看到发生了什么。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36674953

复制
相关文章

相似问题

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