我试图仅显示“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' )
答案 0 :(得分: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()
答案 1 :(得分:0)
如果您在日期列上有索引,这将有所帮助
SELECT DocNum, DateDue
FROM prod_po_list
WHERE DateDue >= DATE_SUB(CURDATE(), INTERVAL 365 DAY)
AND DateDue <= CURDATE()