首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql server将比较运算符存储在数据库中并在case语句中使用。

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

Stack Overflow用户
提问于 2017-07-21 21:07:54
回答 1查看 821关注 0票数 1

我要求将比较运算符符号存储在sql数据库中,然后在其他列的incase语句中使用这些比较运算符来呈现结果。我可以知道如何在case语句中获取比较运算符值,然后在case中使用它们吗?

就像..。sample table

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 21:30:06

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

代码语言:javascript
运行
复制
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语句。为了清楚起见,您可以分两步完成此操作

代码语言:javascript
运行
复制
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

另一种选择是

代码语言:javascript
运行
复制
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 = '=' 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45238521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档