0

我有这个查询:

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

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

4

5 回答 5

1

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

于 2012-06-21T05:26:48.040 回答
1

将 CompletedDate 转换为日期,然后执行。

所以你的查询是这样的

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'
于 2012-06-21T05:28:21.517 回答
1

Date请使用类型存储您的日期

或用于STR_TO_DATE格式化您varchar的日期。

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'
于 2012-06-21T05:28:30.970 回答
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') )
于 2012-06-21T05:27:57.350 回答
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

于 2012-06-21T05:29:54.293 回答