我有一个月份和年份的表:maintable
我想要的是范围选择: result
我认为他们之间会是我的朋友,我尝试了以下内容:
SELECT jahr, monat, alles
FROM dbo.table
WHERE (jahr BETWEEN 2017 AND 2018) AND (monat BETWEEN 11 AND 2)
但这不起作用。 我怎样才能得到我想要的东西?
答案 0 :(得分:2)
假设jahr和monat是整数格式,你可以用它们制作一个键,并且可以用这种方式进行比较。你基本上以YYYYMM格式结束。
SELECT jahr, monat, alles
FROM dbo.table
WHERE (jahr*100) + monat between 201711 and 201802
答案 1 :(得分:2)
您可以在不同条件下将这两个日期比较如下所示。
比较日期高于2017年11月(mont< = 12用作安全检查,您可以忽略,如果您可以保证月份列不包含大于12的值)。
jahr >= 2017 AND monat >= 11 AND mont <=12
否则你可以在之间使用 jahr&gt; = 2017年和11至12之间的monat
比较日期低于2018年2月(mont&gt; = 1用作安全检查,您可以忽略,如果您可以保证月份列不包含小于1的值)。
jahr <= 2018 AND monat >= 1 AND mont <=2
否则你可以在
之间使用jahr >= 2017 AND monat between 1 AND 2
使用简单运算符的整体条件
(jahr >= 2017 AND monat >= 11 AND monat <=12)
AND (jahr <= 2018 AND monat >= 1 AND monat <=2)
在条件之间
(jahr >= 2017 AND monat between 11 AND 12)
AND (jahr >= 2017 AND monat between 1 AND 2)
以下是您问题的确切sql。所有三个查询都应该适用于您的目的。
-- With simple operators
SELECT jahr, monat, alles
FROM dbo.table
WHERE (jahr >= 2017 AND monat >= 11 AND monat <=12)
AND (jahr <= 2018 AND monat >= 1 AND monat <=2)
-- With simple operators (Without security boundary checks)
SELECT jahr, monat, alles
FROM dbo.table
WHERE (jahr >= 2017 AND monat >= 11)
AND (jahr <= 2018 AND monat <=2)
-- With between operator
SELECT jahr, monat, alles
FROM dbo.table
WHERE (jahr >= 2017 AND monat between 11 AND 12)
AND (jahr >= 2017 AND monat between 1 AND 2)
答案 2 :(得分:1)
SELECT jahr, monat, alles
FROM dbo.table
WHERE (jahr = 2017 AND monat IN (11,12))
OR (jahr = 2018 AND monat IN (1,2))
输出
jahr monat alles
2017 11 105
2017 12 105
2018 1 104
2018 2 105
演示链接
答案 3 :(得分:1)
我会这样做
SELECT jahr, monat, alles
FROM table1
WHERE cast(cast(jahr as varchar(20))+'-'+cast(monat as varchar(20))+'-01' as date) >= '2017-11-01'
and cast(cast(jahr as varchar(20))+'-'+cast(monat as varchar(20))+'-01' as date) <='2018-02-01'
我认为这是最好的解决方案,因为您让服务器处理详细信息 - 您正在使用数据模型并转换为日期类型,然后让服务器对过滤器进行日期比较。
http://sqlfiddle.com/#!18/13a69/21/0
调试
答案 4 :(得分:0)
SELECT jahr, monat, alles
FROM dbo.table
WHERE ( jahr = 2017 AND monat BETWEEN 11 AND 12 )
OR
( jahr = 2018 AND monat BETWEEN 1 AND 2 )
答案 5 :(得分:0)
您可以尝试以下查询。
SELECT jahr, monat, alles
FROM table1
WHERE CASE WHEN (jahr = 2017 AND monat BETWEEN 11 AND 12) THEN 1
WHEN (jahr = 2018 AND monat BETWEEN 1 AND 2) THEN 1
ELSE 0 END = 1
由于
答案 6 :(得分:0)
您可以使用OR运算符和一些括号:
DECLARE @maintable TABLE (jahr int, monat int, alles int)
INSERT INTO @maintable VALUES
(2017, 7, 189),(2017, 8, 125),(2017, 9, 92),(2017, 10, 98),(2017, 11, 105)
,(2017, 12, 105),(2018, 1, 104),(2018, 2, 105),(2018, 3, 99)
SELECT jahr
,monat
,alles
FROM @maintable
WHERE (jahr >= 2017 AND monat >= 11)
OR
(jahr <= 2018 AND monat <= 2)
产地:
jahr monat alles
2017 11 105
2017 12 105
2018 1 104
2018 2 105