我有一条语句返回日期的单个数字。我想做的是能够跨日期范围执行该语句并获取每个日期的值。
const arr = [
{ date: "01.01.2017", dayOfWeek: "Tuesday" },
{ date: "01.01.2016", dayOfWeek: "Saturday" },
{ date: "01.01.2002", dayOfWeek: "Wednesday" },
{ date: "01.01.2003", dayOfWeek: "Wednesday" }
].sort(
(a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()
).forEach(m => {
console.log(m.date, m.dayOfWeek);
});
这是我在当前语句中得到的单个日期的结果。 2019年6月1日
select dbo.GetItemMTDIssues(inmastx.fac, inmastx.fpartno, inmastx.frev, '6-01-2019')
as MTDiss from inmastx where fpartno='ANF-10-6313-102'
这是我希望在诸如 2019年6月1日至2019年6月5日
|MTDiss|
600
如果有用,还包括该功能。
|MTDiss|
600
450
375
700
300
答案 0 :(得分:2)
您首先需要创建范围,然后下面的t-sql将做到这一点。
declare @startDate datetime='6-01-2019'
declare @endDate datetime='6-05-2019'
;with DateRange as (
select @startDate [date]
union all
select DATEADD(day,1,[date]) [date] from DateRange where [date]<@endDate
)
select * from DateRange
我们可以对其进行测试,然后查看结果以确认这是我们想要的范围。 注意:如果您需要按月跳转或不按日跳数,则只需更改DATEADD中的代码即可。
现在,我们需要更新您的函数以获取范围的开始和结束,并使用所有范围日期,我认为类似下面的内容会有所帮助:-
CREATE FUNCTION [GetItemMTDIssuesRange]
(
@fac char(20), @partno char(25), @rev char(3), @startDateRange datetime, @EndDateRange datetime
)
RETURNS TABLE
AS
RETURN
(
with DateRange as (
select @startDateRange [date]
union all
select DATEADD(day,1,[date]) [date] from DateRange where [date]<@EndDateRange
)
--select * from DateRange
select (isnull(sum(fQty),0.0) * -1) MTDiss
from intran
inner join DateRange on year(fdate) = year(DateRange.[date]) and month(fdate) = month(DateRange.[date])
where ftype = 'I'
and fac = @fac
and fpartno = @partno
and fcpartrev = @rev
group by DateRange.[date]
)
GO
请检查。
如果您不想更改此功能,以下内容也可能会有所帮助:-
declare @startDate datetime='6-01-2019'
declare @endDate datetime='6-05-2019'
;with DateRange as (
select @startDate [date]
union all
select DATEADD(day,1,[date]) [date] from DateRange where [date]<@endDate
)
select dbo.GetItemMTDIssues(inmastx.fac, inmastx.fpartno, inmastx.frev, DateRange.[date])
as MTDiss from inmastx,DateRange
where fpartno='ANF-10-6313-102'