【问题标题】:Query returns null for data from current day to upcoming 7 days查询从当天到未来 7 天的数据返回 null
【发布时间】:2015-10-28 12:47:16
【问题描述】:

我得到了这个表和数据如下图

CREATE TABLE events_calender (
  company_name varchar(30) DEFAULT NULL,
  reg_date varchar(20) 
);

Insert into events_calender values('Childerse Event' , '30-Oct-2015');
Insert into events_calender values('Womens Event' , '05-Nov-2015');
Insert into events_calender values('Mens Event' , '02-Nov-2015');
Insert into events_calender values('DOlls Event' , '02-Oct-2015');

我想返回从当天到最近 7 天的数据(即将发生的事件)

这个方法我试过了

从 events_calender 中选择 * WHERE reg_date BETWEEN DATE(NOW()) AND DATE(DATE_ADD(NOW(), INTERVAL 7 DAY))

但即使有记录,实际上也没有返回任何数据

http://sqlfiddle.com/#!9/25bd0/3

【问题讨论】:

  • 错误的类型声明 reg_date varchar(20) 应该是 reg_date date
  • 谢谢,我无法更改数据类型,因为已经插入了很多数据,所以无论如何我可以在查询本身中修改
  • DATE( DATE_ADD( NOW() , INTERVAL 7 DAY ) ) 必须为 -7 DAY
  • 您的小提琴与您的描述不符。在您的小提琴中,您有 reg_date timestamp 并且查询会相应地工作。

标签: mysql


【解决方案1】:

reg_date varchar(20) 声明的类型错误应该是 reg_date date

http://sqlfiddle.com/#!9/22cfe/1

CREATE TABLE events_calender (
  company_name varchar(30) DEFAULT NULL,
  reg_date date 
);

Insert into events_calender values('Childerse Event' , '2015-10-30');
Insert into events_calender values('Womens Event' , '2015-11-05');
Insert into events_calender values('Mens Event' , '2015-11-02');
Insert into events_calender values('DOlls Event' , '2015-10-02');

SELECT * 
FROM events_calender 
WHERE reg_date BETWEEN DATE( NOW() ) AND DATE( DATE_ADD( NOW() , INTERVAL 7 DAY ) )

【讨论】:

  • 谢谢亚历克斯,但正如我所提到的,我无法更改数据类型,我必须只在查询中进行更改。
  • @Preethi Jain:你真的应该改变你的桌子设计。正如您已经注意到的那样,将日期存储为字符串是一个非常糟糕的主意。将日期存储为字符串时,尤其是像您这样使用月份名称时,请注意本地化问题。 “2015 年 10 月 2 日”在大多数语言中不是有效日期,这会使您的 str_to_date 查询失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2018-06-16
  • 2023-03-18
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多