Tsql SQL从日期范围内另一个表中存在数字的表中选择数据

Tsql SQL从日期范围内另一个表中存在数字的表中选择数据,tsql,sql-server-2008-r2,exists,Tsql,Sql Server 2008 R2,Exists,我有两张桌子。我想从表1中选择all,其中ID存在于表2中,并且日期为当前日历年中的任意一天 表1 表2 期望结果 您可以在存在的地方使用 正如@GarethD所指出的,修改WHERE时不使用if YEAR函数,该函数将使用该列上的索引(如果有) SELECT * FROM table1 t WHERE EXISTS (SELECT 1 FROM table2 WHERE ID = t.ID AND [Date] >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GE

我有两张桌子。我想从表1中选择all,其中ID存在于表2中,并且日期为当前日历年中的任意一天

表1

表2

期望结果

您可以在存在的地方使用

正如@GarethD所指出的,修改WHERE时不使用if YEAR函数,该函数将使用该列上的索引(如果有)

SELECT * FROM table1 t
WHERE EXISTS (SELECT 1 FROM table2
WHERE ID = t.ID 
AND [Date] >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) 
AND [Date] <  DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0));
这是你的解决方案

CREATE TABLE #Table1 
(
ID int
,NAME varchar(50)
,Description varchar(250)
)
INSERT INTO #Table1 (ID,NAME,Description)
VALUES (1,'One','The First Item'),
(2,'Two','The second item'),
(3,'Three','The third item'),
(4,'Four','The fourth item'),
(5,'Five','The fith item'),
(6,'Six','The sixth item'),
(7,'Seven','The seventh item'),
(8,'Eight','The eight item'),
(9,'Nine','The ninth item');

CREATE TABLE #Table2
(
ID int
,Date date
)
INSERT INTO #Table2 (ID,Date)
VALUES (1,'1/15/2015'),
(1,'8/8/2015'),
(2,'9/23/2014'),
(3,'7/19/2015'),
(4,'4/23/2010'),
(4,'6/30/2009'),
(4,'12/25/2014'),
(5,'5/17/2015'),
(6,'12/3/2008'),
(9,'9/25/2009'),
(9,'2/2/2015'),
(9,'1/31/2012')
;


SELECT
*
FROM #Table1 t
WHERE t.ID IN (SELECT t2.ID FROM #Table2 t2 WHERE DATEPART(YEAR,t2.Date) = DATEPART(YEAR,GETDATE()))

DROP TABLE #Table1
DROP TABLE #Table2

显示您已经尝试过的内容?作为补充,尽管我倾向于使用[Date]>=DATEADDYEAR,DATEDIFFYEAR,0,GETDATE,0和[Date]CREATE TABLE #Table1 ( ID int ,NAME varchar(50) ,Description varchar(250) ) INSERT INTO #Table1 (ID,NAME,Description) VALUES (1,'One','The First Item'), (2,'Two','The second item'), (3,'Three','The third item'), (4,'Four','The fourth item'), (5,'Five','The fith item'), (6,'Six','The sixth item'), (7,'Seven','The seventh item'), (8,'Eight','The eight item'), (9,'Nine','The ninth item'); CREATE TABLE #Table2 ( ID int ,Date date ) INSERT INTO #Table2 (ID,Date) VALUES (1,'1/15/2015'), (1,'8/8/2015'), (2,'9/23/2014'), (3,'7/19/2015'), (4,'4/23/2010'), (4,'6/30/2009'), (4,'12/25/2014'), (5,'5/17/2015'), (6,'12/3/2008'), (9,'9/25/2009'), (9,'2/2/2015'), (9,'1/31/2012') ; SELECT * FROM #Table1 t WHERE t.ID IN (SELECT t2.ID FROM #Table2 t2 WHERE DATEPART(YEAR,t2.Date) = DATEPART(YEAR,GETDATE())) DROP TABLE #Table1 DROP TABLE #Table2