sql 服务器在数据库中存储比较运算符并在 case 语句中使用
sql server store comparison operators in database and use in case statement
我需要将比较运算符符号存储在 sql 数据库中,然后在其他列上使用这些比较运算符 incase 语句来呈现结果。我可以知道如何在 case 语句中获取比较运算符值,然后在 case..
中使用它们吗?
有点像..
sample table
现在,我需要将符号列中的运算符应用到其他列上,并检查是否满足条件,并相应地显示结果。我该如何实现?
您可以创建这样的函数,它支持 >、>=、<、<= 和 = 运算符:
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
使用这样的函数会对性能产生严重影响(已处理 'row by agonising row'!),但适用于小型数据集。
另一种选择是嵌套的 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
另一种选择是
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 = '='
我需要将比较运算符符号存储在 sql 数据库中,然后在其他列上使用这些比较运算符 incase 语句来呈现结果。我可以知道如何在 case 语句中获取比较运算符值,然后在 case..
中使用它们吗?有点像.. sample table
现在,我需要将符号列中的运算符应用到其他列上,并检查是否满足条件,并相应地显示结果。我该如何实现?
您可以创建这样的函数,它支持 >、>=、<、<= 和 = 运算符:
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
使用这样的函数会对性能产生严重影响(已处理 'row by agonising row'!),但适用于小型数据集。
另一种选择是嵌套的 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
另一种选择是
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 = '='