Sql server 2005 定义一个参数,用于搜索days DATEADD/datediff-SQL server 2005
因此,我现在有了一组按货币和值划分的值,这将显示过去30天的值,但是我希望按日期搜索,最终使用另一个表中的参数Sql server 2005 定义一个参数,用于搜索days DATEADD/datediff-SQL server 2005,sql-server-2005,stored-procedures,datediff,dateadd,Sql Server 2005,Stored Procedures,Datediff,Dateadd,因此,我现在有了一组按货币和值划分的值,这将显示过去30天的值,但是我希望按日期搜索,最终使用另一个表中的参数 ;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY date_loaded Asc) AS n, value, date_loaded, cast(round(value * 0.0001 / 100 * 0.5 + (value * 0.0001),4)AS dec(12,4)) as buy_rate, cast(r
;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY date_loaded Asc) AS n, value,
date_loaded, cast(round(value * 0.0001 / 100 * 0.5 + (value * 0.0001),4)AS dec(12,4)) as buy_rate,
cast(round(value * 0.0001 / 100 * -0.5 + (value * 0.0001), 4) AS dec(12,4)) as sell_rate
FROM texchange_rate WHERE source_currency_code = @source_currency_code
and target_currency_code = @target_currency_code
and date_loaded between dateadd(day, datediff(day, 0 ,getdate())-30, 0) and getdate())
SELECT t2.value, t2.date_loaded, @source_currency_code as source_currency_code,
@target_currency_code as target_currency_code, t2.buy_rate, t2.sell_rate
FROM cte t2 LEFT JOIN cte t1 ON t2.n = t1.n + 1
WHERE t2.value <> ISNULL(t1.value, -1)
order by date_loaded desc
END
到
为了使其正常工作,我尝试在存储过程开始时声明@dayparameter(类似于这里-,尽管这是针对server 2008的),并将其放在dateadd中,会出现错误
Msg 102,第15级,状态1,程序proc_getCurrencyHistory,第48行
“@dayparameter”附近的语法不正确
希望这有意义。您仍然需要进行手术。如果你想通过-30,那么你需要加,如果你想通过30,那么你需要减 如果
@dayparameter
为-30:
dateadd(day, datediff(day, 0 ,getdate()) + @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is important
如果@dayparameter
为30:
dateadd(day, datediff(day, 0 ,getdate()) - @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is still important
我在任何地方都看不到
@days
。你的意思是-@dayparameter
而不是@dayparameter
(注意减号)?很抱歉,是的,我更改了声明名称以便于查看,并且没有包含声明(我将更新我的示例以将其纳入上下文)。它将是@dayparameter
int,然后是@Aaron Bertrand的@dayparameters
=-30有效点。当然,你也可以在cte之外计算“起始日期”?@KAJ-True,可以将日期放在这一部分,可能会让事情变得更简单-我已经在代码中移动了它,谢谢
dateadd(day, datediff(day, 0 ,getdate()) + @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is important
dateadd(day, datediff(day, 0 ,getdate()) - @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is still important