2013-04-25 9 views
68

Jakie są alternatywy do wdrożenia następujące zapytanie:Czy w T-Sql jest operator trójskładnikowy?

select * 
from table 
where isExternal = @type = 2 ? 1 : 0 
+2

Oczywiście, odpowiedź na pytanie, które stawiasz w swoim tytule, brzmi - oczywiście. Operator ['BETWEEN'] (https://msdn.microsoft.com/en-us/library/ms187922.aspx) jest zdefiniowany w celu podjęcia trzech argumentów. To, czego szukałeś, to operator * warunkowy * - który * zdarza się * być jedynym operatorem, który zdefiniował trzy argumenty zdefiniowane przez większość języków. –

+0

@JFA - nie, * a * operator potrójny to dowolny operator, który pobiera trzy operandy. W większości języków, * jeśli * mają operatorów trójskładnikowych, powszechne jest, że mają tylko jeden, czyli (ogólnie) nazywane operatorem warunkowym. Wywoływanie rzeczy za pomocą niewłaściwego nazwiska (lub używanie ogólnej nazwy, gdy masz na myśli konkretną osobę) może po prostu doprowadzić do większego zamieszania. Aby uzyskać dalsze wskazówki, zapoznaj się z wiki tagu [tag: ternary-operator]. –

+0

@Damien_The_Unbeliever https://en.wikipedia.org/wiki/Ternary_operation: patrz "Ternary operator" –

Odpowiedz

81

Korzystając case:

select * 
from table 
where isExternal = case @type when 2 then 1 else 0 end 
104

W SQL Server , można użyć IIF function:

SELECT * 
FROM table 
WHERE isExternal = IIF(@type = 2, 1, 0) 

Należy również zauważyć, : w T-SQL operator przypisania (i porównania) to tylko = (a nie == - to C#)

Powiązane problemy