Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 如何为日历报告创建连续的一年?_Date - Fatal编程技术网

Date 如何为日历报告创建连续的一年?

Date 如何为日历报告创建连续的一年?,date,Date,以下是我正在使用的查询: SELECT * FROM ra_ProjectCalendar WHERE MonthNumber between @Month and @Month + 12 and FullYear = @Year 它在今年非常有效,但在今年12月停止。如何让它显示连续的一年?像这样的东西可能会更好-但不清楚您的意图是什么: select * from ra_ProjectCalendar where DATEDIFF ( month , @startdate , @

以下是我正在使用的查询:

SELECT * FROM ra_ProjectCalendar 
WHERE MonthNumber between @Month and @Month + 12 and FullYear = @Year

它在今年非常有效,但在今年12月停止。如何让它显示连续的一年?

像这样的东西可能会更好-但不清楚您的意图是什么:

select * 
 from ra_ProjectCalendar 
 where DATEDIFF ( month , @startdate , @enddate ) <=12
选择*
从ra_项目日历

where DATEDIFF(month,@startdate,@enddate)像这样的东西可能会更好——但不清楚您的意图是什么:

select * 
 from ra_ProjectCalendar 
 where DATEDIFF ( month , @startdate , @enddate ) <=12
选择*
从ra_项目日历

其中DATEDIFF(month,@startdate,@enddate)实际传入并存储日期,而不是月份和年份,并使用DATEDIFF与当前日期进行比较:

WHERE DATEDIFF(m, @PassedDate, StoredDateColumn) < 12
其中DATEDIFF(m,@PassedDate,StoredDateColumn)<12

请注意,我使用的是12个月,而不是1年,因为DATEDIFF计算跨越边界的数量。所以在12月,使用datediff和year datepart只需一个月就可以返回一个。您确实需要12个月的时间跨度。

实际传入并存储日期,而不是月份和年份,并使用DateDiff与当前日期进行比较:

WHERE DATEDIFF(m, @PassedDate, StoredDateColumn) < 12
其中DATEDIFF(m,@PassedDate,StoredDateColumn)<12

请注意,我使用的是12个月,而不是1年,因为DATEDIFF计算跨越边界的数量。所以在12月,使用datediff和year datepart只需一个月就可以返回一个。你真的想要12个月的时间跨度。

你的日期是如何存储的

根据您的sql,我猜您有一个字段表示月份,一个字段表示年份,一个字段表示日期。我建议改为使用一个datetime字段,然后可以使用该方法添加12个月(或任何其他间隔)

编辑:有人在一篇评论中向我指出,你从中获得的一件事是性能——这或多或少取决于你的应用规模,但总是很好地意识到这一点。如果在存储过程中运行此查询,将执行以下操作:

DECLARE @oneYearAhead datetime;
SET @oneYearAhead = DateAdd(m, 12, @PassedDate)

SELECT * FROM ra_ProjectCalendar
 WHERE @PassedDate <= [Date] AND [Date] <= @oneYearAhead; 
DECLARE@oneYearAhead datetime;
设置@oneYearAhead=DateAdd(m,12,@PassedDate)
从ra_项目日历中选择*

@PassedDate您的日期是如何存储的

根据您的sql,我猜您有一个字段表示月份,一个字段表示年份,一个字段表示日期。我建议改为使用一个datetime字段,然后可以使用该方法添加12个月(或任何其他间隔)

编辑:有人在一篇评论中向我指出,你从中获得的一件事是性能——这或多或少取决于你的应用规模,但总是很好地意识到这一点。如果在存储过程中运行此查询,将执行以下操作:

DECLARE @oneYearAhead datetime;
SET @oneYearAhead = DateAdd(m, 12, @PassedDate)

SELECT * FROM ra_ProjectCalendar
 WHERE @PassedDate <= [Date] AND [Date] <= @oneYearAhead; 
DECLARE@oneYearAhead datetime;
设置@oneYearAhead=DateAdd(m,12,@PassedDate)
从ra_项目日历中选择*
其中@PassedDate尝试以下方法:

SELECT * FROM ra_ProjectCalendar 
WHERE 
  (MonthNumber > @Month AND FullYear = @Year)
  OR (MonthNumber < @Month AND FullYear = @Year + 1)
从ra_项目日历中选择*
哪里
(月数>月,全年=@年)
或(月数<@月和整年=@年+1)
试试这个:

SELECT * FROM ra_ProjectCalendar 
WHERE 
  (MonthNumber > @Month AND FullYear = @Year)
  OR (MonthNumber < @Month AND FullYear = @Year + 1)
从ra_项目日历中选择*
哪里
(月数>月,全年=@年)
或(月数<@月和整年=@年+1)

根据信息的存储方式(从查询中很难判断),DATEADD或DATEDIFF都可能是正确的。MSDN上有一个可用的列表。

取决于您的信息存储方式(从您的查询中很难判断),DATEADD或DATEDIFF都可能适合您。MSDN上有一个可用的列表。

Hmm,我喜欢这样,因为您可以在查询之前计算一次DateAdd(),然后执行简单的日期比较,而不是where子句中的函数调用。显示一些代码,我将进行upvote。嗯,我喜欢这样,因为您可以在查询之前计算一次DateAdd(),然后执行简单的日期比较,而不是where子句中的函数调用。显示一些代码,我将向上投票。