选择当前星期,从星期一开始而不是星期日

时间:2020-05-10 16:36:39

标签: mysql sql

我设法从当前星期中选择数据,但是星期本身从星期日开始,这对我来说不是正确的格式,应该从星期一开始。我正在使用MySQL查询数据。

SELECT IFNULL(SUM(rendeles_dbszam),0) as eladott_pizzak_szama 
  FROM rendeles 
 WHERE WEEK(rendeles_idopont) = WEEK(CURRENT_DATE())

2 个答案:

答案 0 :(得分:0)

mysql中的'Week'有2个输入:日期和星期类型。默认情况下,它等于0。这意味着星期从星期日开始。尝试以下代码:

SELECT IFNULL(SUM(rendeles_dbszam),0) as eladott_pizzak_szama FROM rendeles WHERE WEEK(rendeles_idopont) = WEEK(CURRENT_DATE(),1)

答案 1 :(得分:-1)

您可以使用这个小公式来获取任何给定DATE,DATETIME或TIMESTAMP对象的星期一开始。

FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7))

我喜欢在这样定义的名为TRUNC_MONDAY(datestamp)的存储函数中使用它。

DELIMITER $$

DROP FUNCTION IF EXISTS TRUNC_MONDAY$$
CREATE
  FUNCTION TRUNC_MONDAY(datestamp DATETIME)
  RETURNS DATE DETERMINISTIC NO SQL
  COMMENT 'preceding Monday'
  RETURN FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7))$$

DELIMITER ;

那么你可以做这样的事情

SELECT IFNULL(SUM(rendeles_dbszam),0) as eladott_pizzak_szama
  FROM rendeles
 WHERE TRUNC_MONDAY(rendeles_idopont) = TRUNC_MONDAY(CURRENT_DATE())

或什至获得一份涵盖前八个星期和当前星期的报告。

SELECT SUM(rendeles_dbszam) as eladott_pizzak_szama,
       TRUNC_MONDAY(rendeles_idopont) as week_beginning
  FROM rendeles
 WHERE rendeles_idopont >= TRUNC_MONDAY(CURDATE()) - INTERVAL 8 WEEK
   AND rendeles_idopoint < TRUNC_MONDAY(CURDATE()) + INTERVAL 1 WEEK
 GROUP BY TRUNC_MONDAY(rendeles_idopont)

我特别喜欢这种TRUNC_MONDAY()方法,因为它即使在包含元旦的日历周中也能正常工作。

(如果您想TRUNC_SUNDAY()将公式中的-2更改为-1。)