Sql Server中的标量Max

Rei*_*ein 6 sql sql-server

如何在Sql server中实现标量MAX(如Math.Max).(在本质上我想实现类似Max(表达式,0)的东西,使负值替换为0.)

我已经在其他线程中看到了解决方案

  • 创建标量函数(性能如何?)
  • 表达式> 0时表达式ELSE 0) (那么"表达式"被评估两次?)
  • Max(聚合)的复杂用法.

什么是最好的?为什么Sql Server没有这样内置的东西?我看不到任何并发症?

Qua*_*noi 5

在所有其他主要系统中,调用此函数GREATEST.

SQL Server 严重缺乏它.

你可以制作一堆case语句,或使用类似的东西:

SELECT  (
        SELECT  MAX(expression)
        FROM    (
                SELECT  expression
                UNION ALL
                SELECT  0
                ) q
        ) AS greatest
FROM    table_that_has_a_field_named_expression
Run Code Online (Sandbox Code Playgroud)

后者比CASE声明的效果要差一些.

  • 为了在产品中使用此功能,请对 Microsoft Connect 项目进行投票:http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar-max (2认同)

Bet*_*eth 1

您想在sql server中创建一个名为MAX的用户定义标量函数,以两个参数作为输入,一个表达式和一个最小值,如果超过最小值则返回表达式,否则返回最小值?

我不会担心标量函数的性能,让服务器来做。我还会使用 IF 而不是 CASE 来测试 > 最小值。

我猜,SQL Server 没有为您提供内置函数,因为他们认为它不会得到足够广泛的使用。