我正在为1年前注册的人们制作一份报告。
我想在特定时间运行此报告。所以在两个约会之间成为会员一年的任何人。
这是一个表单,其中date1和date2之间有提交。
所以,如果我想看到2014年8月1日至2014年10月1日期间成为会员的任何人作为例子。任何曾经或曾经是这些日期之间成员的人都会在列表中显示。
到目前为止,我有这个,但它没有显示任何记录:
SELECT *
FROM `nfw_users`
WHERE DATE(date_join) BETWEEN 2012-05-20
AND 2012-10-20 AND date_join >= DATE_SUB(NOW(),INTERVAL 1 YEAR)
答案 0 :(得分:1)
您查询中的文字2012-05-20
和2012-10-20
可能会在" date"中评估为NULL。上下文。 (这是有效的语法,但可能不是你想要的。)
日期文字应该用单引号括起来,例如
... BETWEEN '2012-05-20' AND '2012-10-20'
^ ^ ^ ^
截至目前(' 2014-10-14 06:36:36'),这个谓词:
date_join >= DATE_SUB(NOW(),INTERVAL 1 YEAR)
相当于:
date_join >= '2013-10-14 06:36:36'
这意味着不会返回date_join
小于该值的行,因此不能返回任何行,因为没有大于date_join
的{{1}}值也小于或等于'2013-10-14'
。查询中的谓词使得任何行都无法匹配。
您的规范有点含糊不清。一些示例数据以及您希望返回哪些行将大大有助于澄清规范。您想要在给定日期范围内为成员一年或至少一年的成员返回行吗?
返回"成员"的行谁在两个具体日期之间的某个时间达成一周年纪念日:
'2012-10-20'
返回"成员"的行在两个日期之间已经(或将会)成员至少一整年的人,我不会看到需要两个边界,对单个下限日期的检查就足够了。
答案 1 :(得分:-1)
请尝试以下查询,并且您在“2012-05-20”
等日期缺少引号SELECT *
FROM `nfw_users`
WHERE DATE(date_join) BETWEEN "2013-05-20" AND "2013-10-20"
AND YEAR(date_join) = YEAR(NOW() - INTERVAL 1 YEAR)