SQL服务器:在视图中声明变量
SQL Server : declare variables in a view
我创建了一个视图并希望有一个滚动数据范围。我知道视图中不允许局部变量,所以想知道最好的方法是什么。我不想在我的 WHERE
中使用我的 DATEADD
,因为我正在处理大量数据,因此会显着降低速度。
CREATE VIEW uvw_new_view
DECLARE @startdate
DECLARE @enddate
SET @startdate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) - 1, 0) -- back 1 year
SET @enddate = DATEADD(yy, DATEDIFF(yy, , GETDATE()) + 4, -1) -- forward 3 years
//stuff
WHERE startdate >= @startdate AND enddate <= @enddate
大家提前干杯:)
根据语法,推测您正在使用 SQL 服务器。
你想要一个 table-valued 函数。例如,returns 范围内所有日期的函数:
create function dates (
@startdate date,
@enddate date
)
returns table
as
return
with cte as (
select @startdate as dte
union all
select dateadd(day, 1, dte)
from cte
where dte < @enddate
)
select dte
from cte;
在这个例子中,Here 是一个 db<>fiddle。
我创建了一个视图并希望有一个滚动数据范围。我知道视图中不允许局部变量,所以想知道最好的方法是什么。我不想在我的 WHERE
中使用我的 DATEADD
,因为我正在处理大量数据,因此会显着降低速度。
CREATE VIEW uvw_new_view
DECLARE @startdate
DECLARE @enddate
SET @startdate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) - 1, 0) -- back 1 year
SET @enddate = DATEADD(yy, DATEDIFF(yy, , GETDATE()) + 4, -1) -- forward 3 years
//stuff
WHERE startdate >= @startdate AND enddate <= @enddate
大家提前干杯:)
根据语法,推测您正在使用 SQL 服务器。
你想要一个 table-valued 函数。例如,returns 范围内所有日期的函数:
create function dates (
@startdate date,
@enddate date
)
returns table
as
return
with cte as (
select @startdate as dte
union all
select dateadd(day, 1, dte)
from cte
where dte < @enddate
)
select dte
from cte;
在这个例子中,Here 是一个 db<>fiddle。