繁体   English   中英

Select 当前周,从星期一开始而不是星期日

[英]Select current week, starts from Monday instead of Sunday

我已经设法 select 本周的数据,但周本身从星期日开始,这对我来说不是正确的格式,它应该从星期一开始。 我正在使用 MySQL 来查询数据。

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

mysql 中的“星期”有 2 个输入:日期和星期类型。 默认情况下它等于 0。这意味着一周从星期日开始。 试试这个代码:

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

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

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

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

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 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM