Чи є потрійний умовний оператор у T-SQL?


112

Назвіть альтернативи для впровадження наступного запиту:

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

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

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

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : див. " ТЕРНАЛЬНИЙ оператор"
Тимофій Канський

@TimothyKanski - ви думаєте, враховуючи зміст та стилістику моїх попередніх коментарів (таких як особливий акцент на a ), що я про це не знаю?
Damien_The_Unbeliever

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

Відповіді:


122

Використання case:

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

165

У 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.