Excel WEEKNUM()vs MySQL YEARWEEK()

时间:2018-01-14 06:03:05

标签: mysql excel

我正在创建一个时钟系统,到目前为止,我已经能够及时获得用户时钟以及本周的用户时钟。

最后一步是让用户获得当前支付期的当前时间。

我已经创建了一个付款期限开始列表&在Excel中结束日期。

每当您使用Excel WEEKNUM()或MySQL YEARWEEK()等函数时,这些函数都会附带一个附加选项参数。

下面的链接显示了表格中这些模式之间的差异。

Excel WEEKNUM() table reference

MySQL YEARWEEK() table reference

我的问题是,如果我们每两周进行一次工资单,我在Excel WEEKNUM()中设置哪种模式对应于MySQL YEARWEEK()?

附加电子表格 clock.logic.xlsx

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

首先是好消息:Excel ISOWEEKNUM function对应MySQL WEEKOFYEAR WEEK(date,3)。因此可以确定ISO周数。

但所有其他WEEK模式都只是废话,因为一年中第一周的定义不适合其他地方使用的任何逻辑。例如,采用最简单的模式,将星期日作为一周的第一天,一年的第一周是一周,一年的第一天就是。这就是Excel s WEEKNUM function返回Return_type 1或省略。在模式0(0-53)或2(1-53)中,这应该是MySQL s WEEK。但到底是什么?

SELECT WEEK('2008-01-01',0); - > 0

SELECT WEEK('2008-01-01',2); - > 52

所以MySQL告诉我们,2008年2月1日星期二,是在2007年第52周?

真的?为什么呢?

因为规则"第1周是第一周......今年有一个星期天" MySQL未履行。相反,MySQL第一周开始似乎是今年的第一个星期日。

因此,除ISO周数外,来自MySQL的所有其他周数都是错误的。有人可能会想:让我们采用modus 0并简单地将1加到结果中。但是在2012年失败了。因为2012-01-01是星期日,MySQL给出了0号和0号的第1周。

示例:

Excel中:

Date        WEEKNUM ISOWEEKNUM
2008-01-01  1       1
2008-02-01  5       5
2008-02-03  6       5
2008-02-04  6       6
2008-12-31  53      1
2009-01-01  1       1
2009-02-01  6       5
2009-12-31  53      53
2012-01-01  1       52
2012-02-01  5       5
2012-12-31  53      1
2016-01-01  1       53
2016-02-01  6       5
2016-12-31  53      52

MySQL的:

drop table if exists tmp;

create table tmp (d date);

insert into tmp (d) values 
('2008-01-01'),
('2008-02-01'),
('2008-02-03'),
('2008-02-04'),
('2008-12-31'),
('2009-01-01'),
('2009-02-01'),
('2009-12-31'),
('2012-01-01'),
('2012-02-01'),
('2012-12-31'),
('2016-01-01'),
('2016-02-01'),
('2016-12-31');

select d as 'Date', week(d,0), week(d,3) from tmp;

结果:

Date        week(d,0) week(d,3)     
2008-01-01  0         1
2008-02-01  4         5
2008-02-03  5         5
2008-02-04  5         6
2008-12-31  52        1
2009-01-01  0         1
2009-02-01  5         5
2009-12-31  52        53
2012-01-01  1         52
2012-02-01  5         5
2012-12-31  53        1
2016-01-01  0         53
2016-02-01  5         5
2016-12-31  52        52

答案 1 :(得分:0)

如果您想在Excel中计算当前支付期的小时数,给定两周的支付期,那么我建议您根本不需要周数(事实上,计算过于复杂,特别是在年初或年末)

如果A2:A100中的日期和B2:B100中的日期工作小时数以及Z2:Z10中的付款期开始日期列表,那么您可以在当前的付款期间获得这个公式

=SUMIF(A2:A100,">="&LOOKUP(TODAY(),Z2:Z10),B2:B100)

我想你的实际设置更复杂,但上面的一些变化可能仍然可以使用