Czy istnieje trójskładnikowy operator warunkowy w T-SQL?


112

Jakie są alternatywy dla zaimplementowania następującego zapytania:

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

4
Oczywiście odpowiedź na pytanie, które zadajesz w swoim tytule, brzmi - oczywiście. BETWEENOperator definiuje wziąć trzy argumenty. Czego szukali był warunkowy operatora - co zdarza się być jedynym operatorem zdefiniowane wziąć trzy argumenty zdefiniowane przez większość języków.
Damien_The_Unbeliever,

1
@JFA - nie, operatora trójskładnikowy jakikolwiek podmiot, który zajmuje trzy argumenty. W większości języków, jeśli mają jakiekolwiek operatory trójskładnikowe, często mają tylko jeden, czyli (ogólnie) nazywany operatorem warunkowym. Nazywanie rzeczy niewłaściwą nazwą (lub używanie nazwy ogólnej, gdy masz na myśli konkretną) może po prostu prowadzić do większego zamieszania. Aby uzyskać dalsze wskazówki, zapoznaj się z wiki tagów operatorów trójskładnikowych .
Damien_The_Unbeliever

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : zobacz „THE ternary operator”
Timothy Kanski,

@TimothyKanski - czy sądzisz, biorąc pod uwagę treść i styl moich poprzednich komentarzy (np. Kładąc szczególny nacisk na a ), że nie jestem tego świadomy?
Damien_The_Unbeliever

6
OP użył dla rzeczy nazwy pospolitej, a nie jej złej lub zbyt ogólnej nazwy. Nie zgadzam się z twoim wnioskiem, że profesjonaliści (dla których ta strona została zbudowana) będą przez to zdezorientowani, skoro jest to rzeczywiście powszechnie stosowana terminologia.
Timothy Kanski

Odpowiedzi:


122

Zastosowanie case:

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

165

W SQL Server 2012 można użyć IIFfunkcji :

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

Uwaga: w T-SQL operator przypisania (i porównania) jest po prostu =(a nie ==- to jest C #)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.