Como implementar o operador condicional ternário no MySQL


Respostas:


151

Experimente isto:

select if(Id is null, 0, id) as Id;

1
É uma pena que não haja atalhos. Se você deseja apenas obter o primeiro valor que é verdadeiro, deve verificar se há nullou ''e talvez até 0. mySQL é um pouco de duche às vezes
cronoklee

53

A documentação é sua amiga; você deveria ler!

Diz:

IFNULL(expr1,expr2)

Se expr1não for NULL, IFNULL()retorna expr1; caso contrário, ele retorna expr2.

E então muitos exemplos. Isso é equivalente a usar uma condicional ternária com uma comparação NULLe o sujeito de comparação como o segundo operando; que não acontece de usar os símbolos ?e :chegar lá não é realmente relevante para nada.

Então, no seu caso:

SELECT IFNULL(`id`, 0) FROM `table`

Se você está desesperado para fornecer três operandos explicitamente (por quê ?!), mude para IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`

4
+1, mas para responder à pergunta:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - hacker

@ MichaelKrelin-hacker: Mesma coisa, não? E IFNULLé mais terser.
Lightness Races in Orbit

@ MichaelKrelin-hacker: Ah, entendi.
Lightness Races in Orbit

Claro, só para responder à pergunta sobre ternário :)
Michael Krelin - hacker

No meu caso, preciso usar em IFvez de IFNULLou COALESCEporque estou migrando dados para um banco de dados de um fornecedor diferente e não quero importar os valores não nulos, apenas interpretá-los como um status genérico. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusfunciona para mim.
Adam Elsodaney

22

Existem duas maneiras de implementar a mesma lógica de um operador ternário:

  1. Use a IFfunção, por exemplo.IF(expression, true result, false result)
  2. Use a CASEexpressão, por exemplo.

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    

Quando você está verificando NULL, pode usar as funções IFNULLou COALESCE, por exemplo.

IFNULL(ID, 0)
COALESCE(ID, 0)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.