繁体   English   中英

MySQL 在 CASE 语句中使用 date()

[英]MySQL use date() in CASE statement

我正在尝试在 MySQL 中使用 date() function 来仅使用日期时间格式中的日期来创建基于星期几的订单总数的案例。 但是,当我运行此查询时,每种情况的值都是“0”。

select 
(CASE datetime WHEN date(datetime) = '2020-06-22' THEN count(order_id) ELSE 0 END) AS 'Mon'
,(CASE datetime WHEN date(datetime) = '2020-06-23' THEN count(order_id) ELSE 0 END) AS 'Tue'
,(CASE datetime WHEN date(datetime) = '2020-06-24' THEN count(order_id) ELSE 0 END) AS 'Wed'
,(CASE datetime WHEN date(datetime) = '2020-06-25' THEN count(order_id) ELSE 0 END) AS 'Thu'
,(CASE datetime WHEN date(datetime) = '2020-06-26' THEN count(order_id) ELSE 0 END) AS 'Fri'
from table;

当我运行以下查询时,我确认我确实得到了我想要的单个日期的输出。

select count(order_id) 
from table
where date(datetime) = '2020-06-22';

托盘这样的查询:

select
sum( if( weekday(datetime) = 0,1,0)) as 'Mon',
sum( if( weekday(datetime) = 1,1,0)) as 'Tue',
sum( if( weekday(datetime) = 2,1,0)) as 'Wed',
sum( if( weekday(datetime) = 3,1,0)) as 'Thu',
sum( if( weekday(datetime) = 4,1,0)) as 'Fri',
sum( if( weekday(datetime) = 5,1,0)) as 'Sat',
sum( if( weekday(datetime) = 6,1,0)) as 'Sun'

;

你可以使用

WHERE datetime BETWEEN '2020-06-22' AND '2020-06-26' 

如果你想获得一系列日期

MySQL 有一个很好的特性,其中 boolean 值被视为数字,1 表示真,0 表示假。 因此,您可以将逻辑表示为:

select sum( weekday(datetime) = 0 ) as Mon,
       sum( weekday(datetime) = 1 ) as Tue,
       sum( weekday(datetime) = 2 ) as Wed,
       sum( weekday(datetime) = 3 ) as Thu,
       sum( weekday(datetime) = 4 ) as Fri,
       sum( weekday(datetime) = 5 ) as Sat,
       sum( weekday(datetime) = 6 ) as Sun

或者:

select sum( date(datetime) = '2020-06-22' ) as Mon,
       sum( date(datetime) = '2020-06-23' ) as Tue,
       sum( date(datetime) = '2020-06-24' ) as Wed,
       sum( date(datetime) = '2020-06-25' ) as Thu,
       sum( date(datetime) = '2020-06-26' ) as Fri,
       sum( date(datetime) = '2020-06-27' ) as Sat,
       sum( date(datetime) = '2020-06-28' ) as Sun

您的查询不起作用,因为它是一个聚合查询( COUNT() ),但您在SELECT中有未聚合的列。 MySQL 应该返回一个解析错误——最新版本确实如此。

我也强烈建议您不要使用单引号来分隔列。 以下是三个原因:

  • 您的列名很好,不需要转义。
  • 单引号只能用于字符串和日期常量。
  • 如果确实需要对标识符进行转义,则可以使用反引号。

暂无
暂无

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

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