我正在尝试获取2016年1月至2018年3月之间的日期。我使用了以下查询。但是它没有返回适当的结果。输入列将在运行时出现。我们无法将其转换为日期,因为输入列可以包含四分之一。
SELECT Year,Month,DayOfMonth
FROM period
WHERE
(Year >= 2016 and monthofyear >= 1 )
OR (Year <= 2018 and monthofyear <= 3 )
GROUP BY
Year,Month,DayOfMonth order by year,DayOfMonth;
答案 0 :(得分:3)
您的WHERE
子句中的逻辑似乎不正确。我想你想要这个:
SELECT Year, Month, DayOfMonth
FROM period
WHERE
(Year = 2017 AND monthofyear >= 1) OR
(Year = 2018 AND monthofyear <= 3)
GROUP BY
Year,
Month,
DayOfMonth
ORDER BY
Year,
DayOfMonth;
也就是说,仅允许的两个年份是2017和2018,并且每年由单独的逻辑处理。对于2017年,我们接受从1月开始的任何月份,而对于2018年,我们仅接受3月或更早的时间。
编辑:
如果您想覆盖2016年1月至2019年3月的范围,则可以尝试:
WHERE
Year IN (2016, 2017) OR
(Year = 2018 AND monthofyear <= 3)
答案 1 :(得分:0)
使用适当的强制转换功能将您的年+月强制转换为年+月+ 01的真实日期,并以YYYYMMDD的格式转换为日期。您在表达式中添加01。现在,日期运算将解决它
where to_date(year+month+'01','YYYYMMDD') between to_date('20170101','YYYYMMDD') and to_date('20180301','YYYYMMDD')
Abovt是oracle偏向的SQL,但是所有SQL都可以让您将年+月转换为有效日期,并将该月的第一天作为真实日期。