我正在使用准备好的声明,但仅针对此问题,请参阅以下示例:
'SELECT agentname,agentjoindate FROM agentdatabase WHERE joindate = (NOW() - INTERVAL 11 DAY)'
如果joindate恰好是11天前,请选择名称和加入日期。当应该至少为1时,我似乎无法获得上述查询的任何结果。如果我使用大于或小于它的工作但不使用等于时。 joindate是Mysql数据库中的日期类型列。日期类型字段是否可以等于(NOW() - INTERVAL 11 DAY)
,因为它似乎大于或小于唯一有效的运算符?
答案 0 :(得分:1)
如果没有看到这些值,我会假设您的日期遵循格式yyyy-mm-dd
。
但是,NOW() - INTERVAL 11 DAY
的格式为yyyy-mm-dd H:m:s
;它也会有时间。
因此,即使您的约会也有时间,您仍然不希望仅在确切的日期和时间匹配。
您可以通过从最后一个值获取日期来轻松解决此问题:
... WHERE joindate = DATE(NOW() - INTERVAL 11 DAY)
答案 1 :(得分:0)
使用DATE_SUB功能正确减去日期:
SELECT agentname,agentjoindate FROM agentdatabase WHERE joindate = DATE_SUB(CURDATE(), INTERVAL 11 DAY)
我将NOW()
更改为CURDATE()
,因为第一个返回DATETIME,第二个返回日期。如果joindate
是日期时间,则使用DATE(joindate
)将其投放为日期,否则它也会尝试匹配确切的时间。
答案 2 :(得分:0)
" NOW() - INTERVAL 11 DAY"将以日期时间格式返回日期: 2016-06-20 16:22:26
如果" joindate"不是那种格式,而是以日期格式,它不匹配任何东西。然后你应该使用: " CURDATE() - INTERVAL 11 DAY"
干杯
答案 3 :(得分:0)
您可以在询问以下链接之前询问问题。
How to subtract 30 days from the current datetime in mysql?
并且回答是
SELECT agentname,agentjoindate FROM agentdatabase WHERE joindate BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY)AND NOW();