2010-09-06 156 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'),因爲它需要很長時間才能加載