我想知道是否有任何方法mysql
可以从日期范围中删除星期日,即
Fecha inicIal : 2017-08-01 ( Y-m-d)
Fecha Final : 2017-08-31 ( Y-m-d)
天31
数:星期天数:4
总计:27
还知道一个月从某个日期开始包含的天数,即
Fecha inicIal : 2017-08-01 ( Y-m-d)
天数:31
我想知道是否有任何方法mysql
可以从日期范围中删除星期日,即
Fecha inicIal : 2017-08-01 ( Y-m-d)
Fecha Final : 2017-08-31 ( Y-m-d)
天31
数:星期天数:4
总计:27
还知道一个月从某个日期开始包含的天数,即
Fecha inicIal : 2017-08-01 ( Y-m-d)
天数:31
该函数
DAYOFWEEK(date)
接收一个日期作为参数,并返回一个表示日期的数字。根据文档,编号如下:...
因此,一个简单的查询可以有一个类似于以下的排除子句:
您的问题很有趣,并且可能会导致其他问题,例如间隔中有多少个星期六?或者里面有多少个工作日?有几种方法可以解决,原则上我可以根据倍数的计算想到以下几种。让我们来看看:
假设如下:我们要计算 2017 年 8 月 7 日(星期一)和 2017 年 8 月 21 日(也是星期一)之间有多少个星期日。首先,总共有 15 天,第一个是星期一,因此,如果我们将星期一视为第 1 天,则范围的天数(从起始日期开始计算)可以看作是以下集合:
在这个范围内,其中星期一是一周中的第 1,星期日是 7,定位星期日就像计算 7 的倍数一样简单。有效计算为:除法的整数部分 15 / 7 = 2。有实际上是 2 个星期日(第 7 天和第 14 天)。
唯一违反此策略的情况是,当下限已经是星期日,那么在 15 天内,我们将有 3 个星期日,而不是 2 个星期日,例如,在以下一周中的天数列表中(从 6/8 / 2017 到 8/20/2017),如果我们考虑每个星期的星期几并从 7(星期日)开始,它会是这样的:
还有 15 天,但是有 7 的三个倍数:7、14、21,也就是 3 个星期日,所以我们将不得不将这个案例调整为初始逻辑
返回:
最重要的是计算下限的星期几,
@Minimo
因为DAYOFWEEK
它认为星期日是第一天,必须调整为7。通过配置@DiaSemana
,可以计算任何天数。另一方面,要知道两个日期之间的天数,可以使用
DATEDIFF
我们已经使用过的函数,例如:在我们的示例中,它将返回
31
天数,然后通过简单的减法,我们可以用完星期日并得出结论,即有 27 个工作日。如果您想知道距离月底还有多少天,使用LAST_DAY()
我们给该月的最后一天一个日期,DATEDIFF
我们可以获得距离月底还有多少天,例如例子:对于第一种情况,计算除星期日之外的两个日期之间的天数可以通过每周每 7 天减去一天来完成,如果从星期日开始则再减去一天,根据条件是否设置结果满足。请记住,使用差异功能时,它考虑的是差异而不是总天数,因此必须通过添加一天来更正数据。
第二个问题,从一个日期到月底的天数,可以通过计算一个日期的一个月的最后一天
LAST_DAY
以及两者之间的差来解决:在最后一种情况下,要计算某个日期所在月份的天数,您可以使用
DAY(LAST_DAY(FECHA))
.