SQL Server хранить операторы сравнения в базе данных и использовать в случае заявления
У меня есть требование хранить символы оператора сравнения в базе данных sql, а затем использовать эти операторы сравнения incase в других столбцах для отображения результата. Могу ли я узнать, как получить значение оператора сравнения в операторе case, а затем использовать их в случае...
Нечто подобное.. образец таблицы
Теперь мне нужно применить оператор из столбца символов к другим столбцам и проверить, выполнено ли условие, соответственно отобразить результат. Как мне этого добиться?
1 ответ
Вы можете создать такую функцию, которая поддерживает операторы>,>=,<, <= и =:
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
Использование такой функции окажет серьезное влияние на производительность (она обрабатывается "строка за агонизирующей строкой"!), Но подойдет для небольших наборов данных.
Другим вариантом будет вложенный регистр. для ясности вы можете сделать это в два этапа
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 = '='