Есть ли в T-SQL тернарный условный оператор?


113

Каковы альтернативы реализации следующего запроса:

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

4
Конечно, ответ на вопрос, который вы задаете в своем заголовке, - конечно. BETWEENОператор определяется принимать три аргумента. То, что вы искали, было условным оператором, который оказался единственным оператором, принимающим три аргумента, определенных в большинстве языков.
Damien_The_Unbeliever

1
Не @JFA - нет, троичный оператор любой оператор , который принимает три операнда. В большинстве языков, если у них есть какие-либо тернарные операторы, обычно используется только один, который (обычно) называется условным оператором. Называя вещи неправильным именем (или используя общее имя, когда вы имеете в виду конкретное), вы можете еще больше запутаться. Для получения дополнительных рекомендаций обратитесь к вики -странице тегов тернарного оператора .
Damien_The_Unbeliever 08

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : см. « Тройной оператор»
Тимоти Кански,

@TimothyKanski - считаете ли вы, что, учитывая содержание и стиль моих предыдущих комментариев (например, особое внимание уделяется букве а ), я не знаю об этом?
Damien_The_Unbeliever

6
OP использовал для вещи общее название, а не неправильное или слишком общее название. Я не согласен с вашим выводом, что профессионалы (для которых был создан этот сайт) будут сбиты с толку этим, хотя это действительно общепринятая терминология.
Тимоти Кански

Ответы:


123

Использование case:

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

166

В SQL Server 2012 вы можете использовать IIFфункцию :

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

Также обратите внимание: в T-SQL оператор присваивания (и сравнения) просто =(а не ==- это C #)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.