Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel WEEKNUM()与MySQL YEARWEEK()的比较_Mysql_Excel - Fatal编程技术网

Excel WEEKNUM()与MySQL YEARWEEK()的比较

Excel WEEKNUM()与MySQL YEARWEEK()的比较,mysql,excel,Mysql,Excel,我正在创建一个时钟时间系统,到目前为止,我已经能够获得今天的用户时钟时间和本周的用户时钟时间 最后一步是获取当前付款期的用户当前时间 我已经在Excel中创建了一个支付期开始和结束日期列表 无论何时使用Excel WEEKNUM()或MySQL YEARWEEK()之类的函数,这些函数都会附带一个附加选项参数 下面的链接在表格中显示了这些模式之间的差异 我的问题是,如果我们每两周发一次工资,我应该在Excel WEEKNUM()中设置与MySQL YEARWEEK()对应的哪种模式 随附电子

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

最后一步是获取当前付款期的用户当前时间

我已经在Excel中创建了一个支付期开始和结束日期列表

无论何时使用Excel WEEKNUM()或MySQL YEARWEEK()之类的函数,这些函数都会附带一个附加选项参数

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

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

随附电子表格


感谢您的帮助。

首先,好消息是:
Excel
对应的是
MySQL
,它是。因此,确定ISO周数是可能的

但所有其他模式都是垃圾,因为一年中第一周的定义不符合其他地方使用的任何逻辑。例如,以星期日为一周的第一天,一年的第一周为一周的最简单模式为例,一年的第一天为一周。这是
Excel
s返回的
Return\u type
1或省略的内容。在modus 0(0-53)或modus 2(1-53)中,这应该是
MySQL
s
WEEK
。但这到底是怎么回事

选择周('2008-01-01',0)->0

选择周('2008-01-01',2)->52

所以MySQL告诉我们,2008-01-01星期二是2007年第52周吗

真的吗?为什么?

因为
MySQL
没有满足“第一周是今年的第一周…有一个星期日”的规则。相反,对于
MySQL
来说,今年的第一周从第一个周日开始

因此,除了ISO周数,MySQL中的所有其他周数都是错误的。有人可能会想:让我们取modus 0,然后简单地将1添加到结果中。但这在2012年就失败了。因为2012-01-01是星期天,MySQL在modus 0和modus 2中都给出了第1周

示例:

卓越:

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

如果您想在Excel中计算当前薪资周期中的小时数,给定两周的薪资周期,那么我建议您根本不需要周数(事实上,这会使计算过于复杂,尤其是在年初或年底)

如果您在
A2:A100
中有日期,在
B2:B100
中有这些日期的工作小时数,并且在
Z2:Z10
中有发薪期开始日期列表,则您可以使用此公式获得当前发薪期的小时数

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


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

这个网站已经到了发布问题只会给你带来坏名声的地步。谢谢你的否决票。这很有帮助。我在发帖之前并没有研究过这个问题。再次感谢。一些“天才”看到类似的关键字出现,所以它一定是重复的。这就是点击“向下投票”所需的全部研究。关于向下投票,你是对的。但是相应的函数是或在
Excel
MySQL
中。请描述您在尝试从两者获得相同结果时遇到的问题。在MySQL中,对于两周一次的支付周期,每周使用哪种模式?1、5或7?这正是我想要的。不确定如何接受您的评论作为答案。我已使用用于您审阅的excel电子表格更新了帖子。我已使用用于您审阅的excel电子表格更新了帖子。请让我知道您是否希望根据我创建电子表格的方式添加任何最终想法。不清楚您试图通过excel电子表格实现什么,以及这与
MySQL
的关系。但很高兴看到您正在使用
ISOWEEKNUM
,因为这是一个正确定义的标准。但你确定在一个以英寸为单位测量长度的国家,这是可以容忍的吗,英尺和码而不是米,重量以盎司和磅而不是千克表示,日期以M/D/Y格式而不是YYYY-MM-DD格式表示?excel表格是我第一次尝试创建一个SELECT查询,该查询的结果范围为从付款期开始日期到付款期结束日期的CURRDATE()。但我始终不清楚。我想你真正需要的是计算一年中第一个星期一的日期。或者换句话说,是一年中第一个ISO周的星期一。这将是
=DATE(B4,1,7)+(2个工作日(DATE(B4,1,7))-7*(ISOWEEKNUM(DATE(B4,1,1))=1)
,其中
B4
包含年份。另请参见。@AxelRichter-计算ISO年第一个星期一日期的更简单公式
=日期(B4,1,5)-工作日(日期(B4,1,3))