从选定日期MYSQL查询之间的任何日期1年

时间:2014-10-14 05:19:53

标签: mysql

我正在为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)

2 个答案:

答案 0 :(得分:1)

您查询中的文字2012-05-202012-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)