2

我试图只显示“DateDue”在过去一年内的记录。问题是我的日期是 Varchar(10) 的格式,因为我的数据馈送会每隔一段时间从供应商那里进入我的数据库。显然,使用此查询未正确过滤日期。是否可以将其(暂时为了比较日期范围)转换为正确的日期数据类型以在查询中使用,但不能永久更改该列的类型?

SELECT `DocNum`, `DateDue` 
FROM `prod_po_list` 
WHERE `DateDue` BETWEEN (DATE_FORMAT(curdate( ) - INTERVAL 365 DAY , '%m/%d/%Y' ))
AND DATE_FORMAT( CURDATE( ) , '%m/%d/%Y' )
4

2 回答 2

5

你在寻找这样的东西吗?

 SELECT DocNum, DateDue 
 FROM prod_po_list
 WHERE STR_TO_DATE(DateDue, '%m/%d/%Y')
       BETWEEN DATE_SUB(CURDATE(), INTERVAL 365 DAY)
       AND CURDATE()
于 2013-06-04T20:29:44.150 回答
0

如果您在日期列上有索引,这将很有帮助

SELECT DocNum, DateDue 
 FROM prod_po_list
 WHERE DateDue >= DATE_SUB(CURDATE(), INTERVAL 365 DAY)
       AND DateDue <= CURDATE()
于 2013-10-12T16:55:48.807 回答