使用varchar类型进行mysql数据搜索

时间:2012-06-21 05:22:21

标签: php mysql sql

我有这个问题:

SELECT * 
From checkfinale 
where AssociateID = 51 AND 
      `CompletedDate` >= '16/04/2012' AND 
     `CompletedDate` <= '22/06/2012'

ComplitedDate是varchar类型。因为我正在使用视图当我试图执行它时,那些日期不会影响条件。有什么错误吗?

5 个答案:

答案 0 :(得分:1)

除非我遗漏了某些内容,否则如果CompletedData的类型为varchar,那么您的日期比较将不起作用。您只是比较字符串,而不是日期或时间戳

答案 1 :(得分:1)

将CompletedDate转换为date,然后执行。

所以你的查询就像这样

SELECT * From checkfinale 
where AssociateID = 51 AND 
    STR_TO_DATE(CompletedDate,'%d/%m/%Y') >= '16/04/2012' 
   AND STR_TO_DATE(CompletedDate,'%d/%m/%Y') <= '22/06/2012'

答案 2 :(得分:1)

请使用Date类型

存储您的日期

或使用STR_TO_DATEvarchar格式化为日期。

SELECT * 
From checkfinale 
where AssociateID = 51 AND 
      STR_TO_DATE(`CompletedDate`,'%d/%m/%Y') >= '16/04/2012' AND 
      STR_TO_DATE(`CompletedDate`,'%d/%m/%Y') <= '22/06/2012'

答案 3 :(得分:0)

尝试使用 STR_TO_DATE() 功能。

  

这是DATE_FORMAT()函数的反转。它需要一个字符串   str和格式字符串格式。 STR_TO_DATE()返回DATETIME值   如果格式字符串包含日期和时间部分,或DATE或   如果字符串仅包含日期或时间部分,则为TIME。如果   从str中提取的日期,时间或日期时间值是非法的,   STR_TO_DATE()返回NULL并产生警告。

试试这个:

SELECT * 
  FROM checkfinale 
 WHERE AssociateID = 51 AND 
      ( STR_TO_DATE(CompletedDate,'%d/%m/%Y') >= date('2012-04-06') AND 
        STR_TO_DATE(CompletedDate,'%d/%m/%Y') <= date('2012-06-22') )

答案 4 :(得分:0)

如果您有字符串并需要将它们作为日期进行比较,请使用CAST()函数。

SELECT * 
From checkfinale 
where AssociateID = 51 AND 
 CAST(`CompletedDate` AS DATE) >= '16/04/2012' AND 
 CAST(`CompletedDate` AS DATE) <= '22/06/2012'

请参阅http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast