代码之家  ›  专栏  ›  技术社区  ›  NVG

比较MySQL中的日期

  •  68
  • NVG  · 技术社区  · 14 年前

    我想比较数据库中两个给定日期之间的日期。 数据库中的列是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服务器版本 使用near的正确语法 'US_Reg_Date,120)>='2000-07-05'和 转换(字符(10),US_Reg_日期,120)<。= “2011-”在第1行

    如何解决这个问题?

    5 回复  |  直到 7 年前
        1
  •  68
  •   Tadeck    13 年前

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

    select * from players
    where 
        us_reg_date between '2000-07-05'
    and
        DATE_ADD('2011-11-10',INTERVAL 1 DAY)
    
        2
  •  74
  •   Mark Byers    14 年前

    那就是 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
    
        3
  •  8
  •   Rahatur    11 年前

    这对我很有用:

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

    请注意格式字符串“%y-%m-%d”和输入日期的格式。

        4
  •  6
  •   demonplus    9 年前

    嘿,伙计们,谢谢你们的帮助,我得到了答案。

    这是密码……

    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')
    
        5
  •  0
  •   Iria    7 年前

    这就是它对我的作用:

    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_更改为\u日期(列,“%d/%m/%y”),因为它需要很长时间才能加载