代码之家  ›  专栏  ›  技术社区  ›  Alon Amir

在带有函数的查询中使用where

  •  0
  • Alon Amir  · 技术社区  · 16 年前
     SELECT col1, col2, dbo.myFunc(@param1, @param2, col1, col2) FROM theTable
    

    如何添加 WHERE 这里是函数的结果 dbo.myFunc ,像 WHERE resultOfMyFunc > 10 例如?

    6 回复  |  直到 12 年前
        1
  •  2
  •   Dathan    16 年前

    只需使用在查询的select中使用的确切函数调用——查询优化器应该缓存该值并在两个位置使用它,而不必重新计算该函数(至少对于mssql是这样的)。

    例如。,

    SELECT col1, col2, myFunc(@arg1, @arg2, col1, col2)
    FROM myTable
    WHERE myFunc(@arg1, @arg2, col1, col2) > 10
    
        2
  •  2
  •   AdaTheDev    16 年前

    只是在前面的答案中加上另一个选项…

    如果您不想在where子句中重复函数调用(例如,它接受许多参数,使查询在您的眼中不那么可读),可以执行以下操作:

    SELECT * FROM
    (
    SELECT col1, col2, dbo.myFunc(@param1, @param2, col1, col2) As funcResult
    FROM theTable
    ) x
    WHERE x.funcResult > 10
    
        3
  •  1
  •   halfdan    16 年前

    尝试

    SELECT 
        col1, 
        col2, 
        dbo.myFunc(@param1, @param2, col1, col2) AS result
    FROM 
        theTable
    WHERE
        result > 10;
    

    最美好的祝福,
    费边

        4
  •  1
  •   Justin Niessner    16 年前
    select col1, col2, dbo.myFunc(@param1, @param2, col1, col2)
    from theTable
    where dbo.myFunc(@param1, @param2, col1, col2) > 10
    

    或者(不确定第二个版本是否适用于所有SQL版本)

    select col1, col2, dbo.myFunc(@param1, @param2, col1, col2) as funcVal
    from theTable
    where funcVal > 10
    
        5
  •  1
  •   mhughes    16 年前

    为了上帝的爱。 有 选择col1,col2,dbo.myfunc(@param1,@param2,col1,col2) 从表 其中dbo.myfunc(@param1,@param2,col1,col2)>10

    select col1, col2, dbo.myFunc(@param1, @param2, col1, col2) as calculated
    FROM theTable
    HAVING calculated > 10
    
        6
  •  0
  •   Tom H zenazn    16 年前

    您可以像在选择中那样使用它:

    WHERE
         dbo.myFunc(@param1, @param2, col1, col2) > 10
    
    推荐文章