我需要两个日期之间的日期自定义输出。让我解释一下我到底需要什么。
假设我有两个日期'2016-01-01'
和'2016-12-31'
yyyy-mm-dd
现在我想显示这两个日期之间的月份/日期列表,但按顺序为3个月,6,9, 12,18,24等
E.g。
E.g。如果我输入开始和结束日期为'2016-01-01'
和'2016-12-31'
,则输出应显示为12个月,因为开始和结束之间的差异为12。
所以输出应该是
3 Months 1/1/2016 4/1/2016
6 Months 1/1/2016 7/1/2016
9 Months 1/1/2016 10/1/2016
12 Months 1/1/2016 1/1/2017
如果开始和结束日期为'2016-01-01'
和'2016-02-15'
,那么输出应显示3个月,因为结束日期在3以内
所以输出应该是
3 Months 1/1/2016 4/1/2016
sql如下
宣布@startdate date ='2016-01-01',@ endDate DATE ='2016-12-31'
declare @mindate date, @maxdate date
SET @mindate = @startdate;
SET @maxdate = @endDate
INSERT INTO @ReportMonths(ReportMonth,MinMOnth,MaxMonth) values
( '3 Months',@mindate,dateadd(month,3,@mindate)),
( '6 Months',@mindate,dateadd(month,6,@mindate)),
( '9 Months',@mindate,dateadd(month,9,@mindate)),
( '12 Months',@mindate,dateadd(month,12,@mindate)),
( '18 Months',@mindate,dateadd(month,18,@mindate)),
( '24 Months',@mindate,dateadd(month,24,@mindate)),
( '36 Months',@mindate,dateadd(month,36,@mindate)),
( '48 Months',@mindate,dateadd(month,48,@mindate)),
( '60 Months',@mindate,dateadd(month,60,@mindate)),
( '72 Months',@mindate,dateadd(month,72,@mindate))
问题是当Maxdate列中没有结束日期时如何删除其余行
答案 0 :(得分:2)
你可以试试这个
declare @mindate date, @maxdate date
SET @mindate = {d'2016-01-01'};
SET @maxdate = {d'2016-02-15'};
DECLARE @ReportMonths TABLE(ReportMonth VARCHAR(100),MinMOnth DATE,MaxMonth DATE)
INSERT INTO @ReportMonths VALUES
( '3 Months',@mindate,dateadd(month,3,@mindate)),
( '6 Months',@mindate,dateadd(month,6,@mindate)),
( '9 Months',@mindate,dateadd(month,9,@mindate)),
( '12 Months',@mindate,dateadd(month,12,@mindate)),
( '18 Months',@mindate,dateadd(month,18,@mindate)),
( '24 Months',@mindate,dateadd(month,24,@mindate)),
( '36 Months',@mindate,dateadd(month,36,@mindate)),
( '48 Months',@mindate,dateadd(month,48,@mindate)),
( '60 Months',@mindate,dateadd(month,60,@mindate)),
( '72 Months',@mindate,dateadd(month,72,@mindate));
- 查询将返回@ReportMonths
的所有行,包含MaxMonth 。这是最小的
SELECT rm.*
FROM @ReportMonths AS rm
WHERE rm.MaxMonth<=(
SELECT MIN( MaxMonth)
FROM @ReportMonths
WHERE MaxMonth > @maxdate
);
答案 1 :(得分:0)
Try This
Select * FROM TABLE_NAME WHERE dates BETWEEN '2016-01-01' and '2016-12-31'
or
Select * FROM TABLE_NAME WHERE dates BETWEEN '20160101' and '20161231'
答案 2 :(得分:0)
如果我正确理解了问题,您可以执行以下操作。我发现日期之间的月份差异。然后我在where子句中使用它。
SELECT *
FROM
@ReportMonths
WHERE
LEFT(ReportMonth, LEN(ReportMonth) - 7) * 1 <= ((DATEDIFF(MONTH, @mindate, @maxdate) / 3) + 1) * 3
结果:
DECLARE @mindate DATE = '2016.01.01' -- yyyy.mm.dd
DECLARE @maxdate DATE = '2016.12.31' -- yyyy.mm.dd
ReportMonth MinMOnth MaxMonth
--------------- ---------- ----------
3 Months 2016-01-01 2016-04-01
6 Months 2016-01-01 2016-07-01
9 Months 2016-01-01 2016-10-01
12 Months 2016-01-01 2017-01-01