函数为mysql中的每周一周

YiS*_*iSh 9 mysql sql function

我正在寻找一个简单的函数来获取mysql查询中的月份(而不是一年中的简单星期).

我能想到的最好的是:

WEEK(dateField) - WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField)-1 DAY)) + 1
Run Code Online (Sandbox Code Playgroud)

我想知道我是否在这里重新发明轮子,是否有更简单,更清洁的解决方案?

Qua*_*noi 15

AFAIK,一个月的第一周没有标准.

一年的第一周是包含的一周Jan 4th.

你如何定义一个月的第一周?

更新:

你需要像这样重写你的查询:

SELECT  WEEK(dateField, 5) -
        WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1
Run Code Online (Sandbox Code Playgroud)

这样就可以正确处理年度转换,并开始几周Monday.

否则,您的查询没问题.


Wal*_*tty 8

有一种替代方法有时用于报告数据库.它是创建一个表,我们称之为ALMANAC,每个日期(密钥)有一行,并且具有可能对报告有用的日期的所有必需属性.

除了每月的一周列之外,可能还有一个列,表明日期是否是公司假日,以及类似的事情.如果您的公司的财政年度从7月或其他月份开始,您可以包括每个日期所属的会计年度,会计月,财政周等.

然后你编写一个程序,凭空填充这个表,给出一系列日期.您只需在此程序中包含一次所有疯狂日历计算.

然后,当您需要知道某个其他表中某个日期的属性时,您只需要进行连接,然后使用该列.是的,这是另一个加入.不,这个表没有规范化.但它仍然是针对某些特定需求的良好设计.