Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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
Sql server 2005 定义一个参数,用于搜索days DATEADD/datediff-SQL server 2005_Sql Server 2005_Stored Procedures_Datediff_Dateadd - Fatal编程技术网

Sql server 2005 定义一个参数,用于搜索days DATEADD/datediff-SQL server 2005

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

因此,我现在有了一组按货币和值划分的值,这将显示过去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(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