在SQL中,我想在2个月内列出今年到期的所有基金。语法是什么?
答案 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
年的出生日期非常不同,第二部分实际上几乎没有选择,也不会对绩效产生太大影响。