SQL日期减法

时间:2009-09-29 13:48:41

标签: sql

在SQL中,我想在2个月内列出今年到期的所有基金。语法是什么?

4 个答案:

答案 0 :(得分:7)

SELECT *
FROM dbo.Funds
WHERE AnniversaryDate <= DATEADD(MONTH, 2, GETDATE())

这应该适用于SQL Server 2000及更高版本。

马克

答案 1 :(得分:1)

SELECT DATE_ADD(CURDATE(), INTERVAL 2 MONTH);

这将在MySQL中完成。我没有添加周年纪念比较,因为我不知道你的表的结构。

答案 2 :(得分:0)

我不太清楚如何解释你的问题,但似乎你是在追求这样的事情。

SELECT *
FROM funds
WHERE CURRENT_DATE <= anniversary
AND CURRENT_DATE > DATE_SUB(anniversary, INTERVAL 2 MONTH)

可能不太准确,因为我不知道您正在使用哪种SQL。

答案 3 :(得分:0)

我不知道“基金周年纪念日”是否是英语中的某种特殊术语,所以我假设你想要选择像生日这样可以存储随机年份的东西,比如{{1} }。

如果不是这样,请纠正我。

1972-01-03中,您需要生成年份列表并加入其中:

SQL Server

此查询分为两部分:

  • 第一部分使用索引范围扫描从列表中选择每年的生日。
  • 第二部分选择超过WITH q AS ( SELECT 0 AS num UNION ALL SELECT num + 1 FROM q WHERE num <= 100 ) SELECT * FROM mytable WHERE fund_date BETWEEN DATE_ADD(year, -num, GETDATE()) AND DATE_ADD(year, -num, DATE_ADD(month, 2, GETDATE())) UNION ALL SELECT * FROM mytable WHERE fund_date <= DATEADD(year, -100, GETDATE() AND DATE_ADD(year, YEAR(GETDATE()) - YEAR(fund_date), fund_date) BETWEEN GETDATE() AND DATE_ADD(month, 2, GETDATE())) 年的生日(使用单一范围扫描)并过滤所有生日。

由于年龄超过100年的出生日期非常不同,第二部分实际上几乎没有选择,也不会对绩效产生太大影响。