SQL: троичные операции - PullRequest
       1

SQL: троичные операции

9 голосов
/ 27 января 2012

В C ++ вы можете сделать это:

T.x = (T.y > 1 && (T.x - T.y < 0)) ? 0 : (T.x - T.y)

, что на [почти] простом английском языке,

if T.y > 1 and T.x-T.y < 0 then
    set T.x to 0
else 
    set T.x to T.x-T.y 

Можно ли сделать то же самое, используя только SQL,без использования сохраненных процедур или триггеров?

Ответы [ 4 ]

11 голосов
/ 27 января 2012

Используйте оператор CASE:

CASE WHEN T.y > 1 AND (T.x - T.y) < 0 THEN 0 ELSE (T.x - T.y) END
5 голосов
/ 27 января 2012

Да, это возможно, посмотрите документацию , там написано:

IF (expr1, expr2, expr3)

Если expr1 равен TRUE (expr1 <> 0 и expr1 <> NULL), тогда IF () возвращает expr2;в противном случае возвращается expr3.

Этот непроверенный код должен соответствовать вашему случаю:

SELECT IF(((T.y > 1) and (T.x-T.y < 0)), 0, (T.x-T.y))
0 голосов
/ 27 января 2012

Упрощенно:

SELECT *, 
      CASE WHEN (y > 1 AND x < y) THEN 0 ELSE (x - y) END AS result
 FROM T;
0 голосов
/ 27 января 2012
IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

Подробности см. В этом руководстве Функции управления потоком

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...