2017-07-21 7 views
0

J'ai besoin de stocker les symboles de l'opérateur de comparaison dans la base de données sql puis,., Utiliser ces instructions de comparaison ooperators incase sur d'autres colonnes pour rendre le résultat. Puis-je savoir comment puis-je obtenir la comparaison operatopr valeur dans la déclaration de cas et de les utiliser en cas ..SQL Server comparaison des opérateurs de comparaison dans la base de données et l'utilisation dans l'instruction

Quelque chose comme .. sample table

Maintenant, je dois appliquer l'opérateur de la colonne de symbole autre colonnes et vérifiez si la condition est satisfaite, affichez donc le résultat. Comment puis-je y parvenir?

Répondre

0

Vous pouvez créer une fonction comme celui-ci, qui prend en charge>,> =, <, < = et = opérateurs:

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 

Et puis utilisez select dbo.func_Generic_Compare (col1,col2,operator) as Result from table

En utilisant une fonction comme celui-ci aura un impact sérieux sur les performances (il est traité 'row by agonizing row'!) mais sera parfait pour les jeux de données de petite taille.

Une autre option serait une instruction case imbriquée. pour plus de clarté, vous pouvez le faire en deux étapes

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

Une autre option serait

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

je dois effectuer cette comparaison de l'opérateur sur les deux colonnes comme, cas lorsque col1 + opérateur + col2 alors 'True' sinon 'False' end, donc si la condition vérifie, mon résultat sera vrai, sinon faux .. J'ai beaucoup de colonnes, j'ai besoin d'un code générique .. – HappieFeet

+0

"J'aime ... quoi? col1 et col2 utilisant l'opérateur "-> oui – HappieFeet

+0

Votre code fonctionne .. Mais j'ai hav e 12 ensembles de telles colonnes .. Son fastidieux à écrire la même chose pour 12 ensembles .. laissez-moi voir comment puis-je faire ce générique à tous .. – HappieFeet