周日期范围

Week date range

有一个table对象,里面存放的是房产对象的数据。我需要使用查询来计算一个新字段,该字段将显示从星期一到星期日的日期范围,其中包括创建对象的日期(例如,“2020-11-16 - 2020-11-22”)

create table objects(
   object_id int NOT NULL PRIMARY KEY ,
city_id int not null ,
price int ,
area_total int ,
status varchar(50) ,
class varchar(50) ,
action varchar(50) ,
date_create timestamp,
FOREIGN KEY(city_id) references avg_price_square_city(city_id)
);

table中的数据:

INSERT INTO objects (object_id, city_id, price, area_total, status, class, action, date_create) 
   VALUES (1, 1, 4600000, 72, 'active', 'Secondary', 'Sale', '2022-05-12 21:49:34');
INSERT INTO objects (object_id, city_id, price, area_total, status, class, action, date_create) 
   VALUES (2, 2, 5400000, 84, 'active', 'Secondary', 'Sale', '2022-05-19 21:49:35');

查询应显示两个字段:对象编号和包含创建日期的范围。如何才能做到这一点 ? P.S 我写了这个查询,但他对着“-”号发誓:

SET @WeekRangeStart  ='2022/05/10';
SET @WeekRangeEnd  = '2022/05/17';
select object_id,@range := @WeekRangeStart '-' @WeekRangeEnd
FROM objects where @range = @WeekRangeStart and date_create between @WeekRangeStart and @WeekRangeEnd
UNION
select object_id,@range from objects where @`range` = @WeekRangeEnd;

错误:[42000][1064] 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1

行的“@WeekRangeEnd FROM objects where @range = @WeekRangeStart and date_create betwee”附近使用的正确语法

我要查询接收:

object_id  @range
1          2022/05/10 - 2022/05/17

@range 列必须包含来自“date_create”

的日期
SET @WeekRangeStart  = CAST('2022/05/10' as DATE);
SET @WeekRangeEnd  = CAST('2022/05/17' as DATE);
SET @range = CONCAT(@WeekRangeStart,' - ',@WeekRangeEnd) ;
-- select @range;
select 
   object_id,
   @range
FROM objects 
where DATE(date_create) between @WeekRangeStart and @WeekRangeEnd
UNION
select object_id,@range from objects 
;

给出下一个结果:

object_id @range
1 2022-05-10 - 2022-05-17
2 2022-05-10 - 2022-05-17
  • 这个结果是放在UNION后面的SQL部分的输出。因为 date_create 不在您的 WeekRangeStart 和 WeekRangeEnd 之间。
    您应该花点时间阅读 UNION 文档。

  • 变量@range是在SQL语句之前计算的,因为值是常量

参见:DBFIDDLE

注意:您应该尽量在所有地方使用相同的日期格式,而不是像 '2022-05-19 21:49:35'2022/05/10 这样混合使用日期。使用 - 或使用 /,但不要混合使用它们...

编辑:校准后“我需要使用查询来计算将显示从星期一到星期日的日期范围的新字段,...”:

您可能想做的事:

SET @WeekDate = CAST('2022/05/10' as DATETIME);

SELECT 
   ADDDATE(@WeekDate, -(DAYOFWEEK(@WeekDate)-1) +1) as Monday,
   DATE_ADD(ADDDATE(@WeekDate, -(DAYOFWEEK(@WeekDate)-1) +9), INTERVAL -1 SECOND) as Sunday;

输出:

Monday Sunday
2022-05-09 00:00:00 2022-05-16 23:59:59