我有这个查询:
SELECT *
From checkfinale
where AssociateID = 51 AND
`CompletedDate` >= '16/04/2012' AND
`CompletedDate` <= '22/06/2012'
ComplitedDate 是 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'
除非我遗漏了什么,否则如果 CompleteData 是 varchar 类型,那么您的日期比较将不起作用。您只是在比较字符串,而不是日期或时间戳
请使用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'
尝试使用 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') )
如果您有字符串并且需要将它们作为日期进行比较,请使用 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