T-SQL WHERE 子句中使用 BETWEEN 日期的 CASE
T-SQL CASE in the WHERE Clause using BETWEEN dates
语法有问题,需要 return 基于数字和日期范围的结果,如果是 6,2 则此日期范围否则为其他日期范围。
DECLARE @Test TABLE
(
ID NVARCHAR(10)
,Number INT
,[Date] DATETIME
)
INSERT INTO @Test VALUES ('TG32',6,'20160715')
INSERT INTO @Test VALUES ('TG47',6,'20160803')
INSERT INTO @Test VALUES ('AG9',6,'20160805')
INSERT INTO @Test VALUES ('BF27',2,'20160804')
INSERT INTO @Test VALUES ('QD65',2,'20160802')
INSERT INTO @Test VALUES ('F98',0,'20160806')
INSERT INTO @Test VALUES ('GC5',0,'20160731')
INSERT INTO @Test VALUES ('HT76',0,'20160802')
INSERT INTO @Test VALUES ('KL81',0,'20160805')
INSERT INTO @Test VALUES ('WR52',0,'20160802');
SELECT TOP 10 * FROM @Test
WHERE [Date] = CASE WHEN Number IN ('6','2') THEN ([Date] BETWEEN CAST(GETDATE() - 6 AS date) AND GETDATE())
ELSE ([Date] BETWEEN CAST(GETDATE() - 1 AS date) AND GETDATE()) END
您不能以这种方式使用 CASE
,在 sql 情况下不像 if then else
它更类似于函数 (test?if_yes;if_not)
WHERE [Date] BETWEEN CAST(GETDATE() - CASE WHEN Number IN ('6','2') THEN 6 ELSE 0 END AS date) AND GETDATE()
where 子句中的 CASE 应该 return 一个值,而不是多个值..
像下面那样尝试并集..
SELECT TOP 10 * FROM @Test
WHERE number in (6,2) and [Date]BETWEEN CAST(GETDATE() - 6 AS date) AND GETDATE()
union all
SELECT TOP 10 * FROM @Test
WHERE number not in (6,2) and [Date] BETWEEN CAST(GETDATE() - 1 as date) AND GETDATE()
语法有问题,需要 return 基于数字和日期范围的结果,如果是 6,2 则此日期范围否则为其他日期范围。
DECLARE @Test TABLE
(
ID NVARCHAR(10)
,Number INT
,[Date] DATETIME
)
INSERT INTO @Test VALUES ('TG32',6,'20160715')
INSERT INTO @Test VALUES ('TG47',6,'20160803')
INSERT INTO @Test VALUES ('AG9',6,'20160805')
INSERT INTO @Test VALUES ('BF27',2,'20160804')
INSERT INTO @Test VALUES ('QD65',2,'20160802')
INSERT INTO @Test VALUES ('F98',0,'20160806')
INSERT INTO @Test VALUES ('GC5',0,'20160731')
INSERT INTO @Test VALUES ('HT76',0,'20160802')
INSERT INTO @Test VALUES ('KL81',0,'20160805')
INSERT INTO @Test VALUES ('WR52',0,'20160802');
SELECT TOP 10 * FROM @Test
WHERE [Date] = CASE WHEN Number IN ('6','2') THEN ([Date] BETWEEN CAST(GETDATE() - 6 AS date) AND GETDATE())
ELSE ([Date] BETWEEN CAST(GETDATE() - 1 AS date) AND GETDATE()) END
您不能以这种方式使用 CASE
,在 sql 情况下不像 if then else
它更类似于函数 (test?if_yes;if_not)
WHERE [Date] BETWEEN CAST(GETDATE() - CASE WHEN Number IN ('6','2') THEN 6 ELSE 0 END AS date) AND GETDATE()
where 子句中的 CASE 应该 return 一个值,而不是多个值..
像下面那样尝试并集..
SELECT TOP 10 * FROM @Test
WHERE number in (6,2) and [Date]BETWEEN CAST(GETDATE() - 6 AS date) AND GETDATE()
union all
SELECT TOP 10 * FROM @Test
WHERE number not in (6,2) and [Date] BETWEEN CAST(GETDATE() - 1 as date) AND GETDATE()