sql server存储数据库中的比较运算符并在case语句中使用

时间:2017-07-21 13:07:54

标签: sql-server-2008 comparison-operators

我需要在sql数据库中存储比较运算符符号,然后使用这些比较操作符incase语句在其他列上呈现结果。我是否可以知道如何在case语句中获取比较operatopr值,然后在以下情况下使用它们。

像...... sample table

现在,我需要在其他列的符号列中应用运算符,并检查条件是否满足,从而显示结果。我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以创建一个这样的函数,它支持>,> =,<,< =和=运算符:

CREATE FUNCTION func_Generic_Compare 
(

    @Param1 float,
    @Param2 float,
    @operator varchar(2)

)
RETURNS nvarchar(5)
AS
BEGIN

if @operator = '>' or @operator = '>='
   if @Param1 > @Param2 
       return 'True'

if @operator = '<' or @operator = '<='
   if @Param1 < @Param2 
       return 'True'

if @operator = '=' or @operator = '<=' or @operator = '>='
   if @Param1 = @Param2 
       return 'True'

RETURN 'False'

END  

然后使用select dbo.func_Generic_Compare (col1,col2,operator) as Result from table

使用这样的函数会产生严重的性能影响(它是通过令人痛苦的行来处理'!)但对于小型数据集来说会很好。

另一种选择是嵌套的case语句。为清楚起见,您可以分两步完成

Select col1, col2, operator,
case when operator='>' then 
    greater 
else 
    case when operator='<' then 
        less 
    else 
        equal 
    end 
end as result 

from

(Select 
     col1, 
     col2,
     operator, 
     col1>col2 as greater, 
     col1<col2 as less, 
     col1=col2 as equal
from 
compare) as PreCalculated

SQLFiddle

另一种选择是

Select Col1, Col2, Col1>Col2  as Results
from Table
where operator = '>'
union all

Select Col1, Col2, Col1<Col2 
from Table
where operator = '<'
union all

Select Col1, Col2, Col1<Col2 
from Table
where operator = '='