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子句中的函数调用。显示一些代码,我将向上投票。