我有一个是clientbike的桌子
从客户端自行车中选择stime、etime
stime | etime
--------------------------
2016-04-01 | 2016-04-30如果有人搜索stime = 2016-04-05 & etime = 2016-04-07
找到结果
2 Days... 有人能解释一下如何使用sql / mysql吗?
技术
发布于 2016-04-18 03:25:30
如果我理解正确的话,您想要的是重叠天数,其中EndDate是独占的。如果这是正确的,那么从这个开始:
SELECT *
FROM clientbike
WHERE stime <= @ToDate
AND etime >= @FromDate;此查询将返回clientbike中与搜索日期重叠的任何记录。以这种方式构造WHERE子句将检查sdate和edate之间是否存在start this、end this、@ToDate和@FromDate,以及sdate和edate是否位于@ToDate和@FromDate之间。
接下来,我们需要修改SELECT
SELECT GREATEST(stime, @FromDate) AS startDate,
LEAST(etime, @ToDate) AS endDate
FROM clientbike
WHERE stime <= @ToDate
AND etime >= @FromDate;GREATEST和LEAST的要点是确保我们只查看实际重叠的日期。例如:如果是stime = '2016-04-15'和@FromDate = '2016-04-22',则为GREATEST(stime, @FromDate) = '2016-04-22'。然后,我们将使用这两个字段来计算startDate和endDate之间的日期差异
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()函数,因此可以删除前面的两个字段。我只是把它们留在里面,这样你就可以看到发生了什么。
https://stackoverflow.com/questions/36674953
复制相似问题