必须声明标量变量“@start”

时间:2015-03-18 12:33:13

标签: sql percentage datediff

我想计算日期差异并计算百分比。使用下面给出的查询显示一个错误。错误是:Must declare the scalar variable "@start".

查询:

SELECT
((30 * 100.0) / (DATEDIFF(day, @start, @end)) * 250)
AS Percentage1,
((50 * 100.0) / (DATEDIFF(day,@start, @end)) * 250) 
AS  Percentage2

2 个答案:

答案 0 :(得分:4)

您可以在以下内容中声明变量:

使用默认值:

DECLARE @start DATE = '2014-01-02', -- pass default values
        @end   DATE = '2015-01-04'  --

SELECT
((30 * 100.0) / (DATEDIFF(day, @start, @end)) * 250)
AS Percentage1,
((50 * 100.0) / (DATEDIFF(day,@start, @end)) * 250) 
AS  Percentage2

使用SET

  

设置先前使用的创建的指定局部变量   将@local_variable语句声明为指定值。

DECLARE @start DATE, 
        @end   DATE

SET @start = '2014-01-02' -- pass any values
SET @end   = '2015-01-04'  --

SELECT
((30 * 100.0) / (DATEDIFF(day, @start, @end)) * 250)
AS Percentage1,
((50 * 100.0) / (DATEDIFF(day,@start, @end)) * 250) 
AS  Percentage2

两种方式都返回以下结果:

   Percentage1          Percentage2
2043.596730245000    3405.994550408500

答案 1 :(得分:1)

@start和@end是您在查询中使用的变量,应使用相应的数据类型进行声明。这里您的数据类型似乎是DATE

Declare @start DATE
Declare @end DATE

并使用SET

为其指定一些值

例如

SET @start=(select getdate())
SET @end=(select getdate())

然后你可以在查询中使用它们,并且应该将它们声明为某个变量。

注意:如果您在查询中使用任何变量,则应将总查询分配给一个变量并执行它因为在运行时查询将因未找到变量而引发错误

Declare @sql  nvarchar(max)
set @sql='select '+ @start+ ', '+ @end

然后Exec(@sql)