2010-09-06 112 views
57

我想比较两个给定日期之间数据库的日期。 数据库中的列是DATETIME,我只想将其与日期格式进行比较,而不是日期时间格式。在MySQL中比较日期

SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10' 

我得到这个错误,当我执行上面的SQL:

您的SQL语法错误; 检查对应 你的MySQL服务器版本的 正确的语法近 “us_reg_date,120)> = '2000年7月5日' 和 CONVERT(CHAR(10),us_reg_date,120)< =使用手册 '2011-'at line 1

如何解决这个问题?

回答

58

你可以试试下面的查询,

select * from players 
where 
    us_reg_date between '2000-07-05' 
and 
    DATE_ADD('2011-11-10',INTERVAL 1 DAY) 
+12

对于来自Google的用户:mysql中的日期类型以yyyy-mm-dd格式显示。 – 2015-11-29 20:24:23

67

这是将日期转换为字符串的SQL Server syntax。在MySQL中,你可以使用DATE函数从日期时间中提取日期:

SELECT * 
FROM players 
WHERE DATE(us_reg_date) BETWEEN '2000-07-05' AND '2011-11-10' 

但是,如果你想利用在列us_reg_date优势的指标,你可能要改为试试这个:

SELECT * 
FROM players 
WHERE us_reg_date >= '2000-07-05' 
    AND us_reg_date < '2011-11-10' + interval 1 day 
+1

我非常感谢您考虑利用指数。我认为查询不应该有“+ interval 1 day”子句。 – Jurgenfd 2016-12-14 08:58:03

6

这个工作对我来说:

select date_format(date(starttime),'%Y-%m-%d') from data 
where date(starttime) >= date '2012-11-02'; 

请注意格式字符串'%Y-%m-%d'和输入日期的格式。

5

嘿家伙感谢你的帮助我得到了答案。

这里是代码.......

SELECT * FROM table 
WHERE STR_TO_DATE(column, '%d/%m/%Y') 
    BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y') 
    AND STR_TO_DATE('07/10/15', '%d/%m/%Y') 
0

这就是它的工作对我来说:

select * from table 
where column 
BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y') 
AND STR_TO_DATE('07/10/15', '%d/%m/%Y') 

请注意,我不得不改变STR_TO_DATE(列“ %d /%m /%Y'),因为它需要很长时间才能加载