比较MySQL中的日期


92

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

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-07-05'AND CONVERT(CHAR(10),us_reg_date,120)<='2011-'附近使用1行

如何解决此问题?

Answers:


94

您可以在下面的查询中尝试,

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

37
对于来自Google的用户:mysql中的日期类型为yyyy-mm-dd格式。
Błażej米哈利克

86

这是将日期转换为字符串的SQL Server语法。在MySQL中,您可以使用DATE函数从datetime中提取日期:

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
感谢您考虑利用该索引。我认为查询中不应包含“ +间隔1天”子句。
Jurgenfd

10

这对我有用:

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

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


6

嘿,谢谢您的帮助,我得到了答案。

这是代码...

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')

2

这对我有用:

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(column,'%d /%m /%Y'),因为加载它需要很长时间

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.