0

我正在寻找一种在 Select 语句中设置变量的方法,以便以后可以在where子句中使用它。

这是一个例子:

SELECT DateDiff(d,Time_Stamp,GetDate()) as Var1 FROM Report Where Var1 = 5

我注意到该ORDER BY Var1子句可以正常工作,但是当我尝试在 where 语句中使用它时,它不能正常工作,它会在Var1列上出现错误。

这也不起作用,因为它不返回任何行。

DECLARE @Var1 int
SELECT @Var1 = DateDiff(d,Time_Stamp,GetDate()) FROM Report Where @Var1 = 5

如果这对你有意义,你能告诉我在这种情况下你会做什么,这样你就不必编写这样的冗余代码......

SELECT DateDiff(d,Time_Stamp,GetDate()) FROM Report 
 Where DateDiff(d,Time_Stamp,GetDate()) = 5

?

4

3 回答 3

1

你在寻找这样的东西吗?

WITH qry AS
(
    SELECT r.*, DateDiff(d,Time_Stamp,GetDate()) diff
      FROM Report r
)
SELECT * FROM qry 
 WHERE diff > 1

SQLFiddle

于 2013-05-21T09:01:06.813 回答
1

您可以创建表的视图,然后按 Var1 对视图进行排序。但是您不能在 WHERE 子句中使用新的 Column Var1。

于 2013-05-21T09:04:39.593 回答
0
SELECT
    Ext.var1
FROM Report AS R
CROSS APPLY (
    SELECT DateDiff(d,R.Time_Stamp,GetDate()), R.indexedColumn
) AS Ext(var1, var2)
Where Ext.var1 = 5
and Ext.var2 = 5

请注意这一点,where 语句不会使 SQL Server 使用 indexedColumn 上的任何可用索引。

于 2013-05-21T09:11:49.770 回答