Ir ao conteúdo

Função mysql - semelhante a IFNULL


Erciley Junior

Posts recomendados

Postado

Olá a todos.

Estou fazendo uma conta, e queria testar o seguinte:

Se o resultado da conta for igual a 10, quero retornar o valor 500, senão, quero retornar o próprio resultado da conta.

Isso é algo super simples, usando IF, mas não quero usar IF pois a conta é muito extensa, e isso seria repetir código.

E não quero fazer um Sub-select também, ou seja, queria uma função NATIVA que eliminasse a repetição de código que um IF nos obriga:

Isso funciona perfeitamente

IF ( CAMPO1 * CAMPO2 = 10 , 500 , CAMPO1 * CAMPO2 )

Gostaria de algo NATIVO que tivesse o mesmo retorno que o código acima, só que sem repetir a 3ª clásula do IF, ou seja:

IF_novo( CAMPO1 * CAMPO2 = 10 , 500 )

Será que existe algo nativo que faça isso?

Seria uma função idêntica ao IFNULL ou COALESCE, só que o resultado do teste nunca vai ser NULL, sempre será um valor de tipo (valtype) já conhecido.

Espero ter sido claro, hehehhe.

Postado

Olá Douglas.

Então, EU acredito que não existe o que eu falei, mas SIM, dá para resolver com o case, na verdade, foi o que eu fiz, hehehe.

Só que com o CASE ou IF, acaba-se repetindo o código.

O código real, PRONTO e funcionando, é esse, mas veja que se repete um trecho, nada demais, mas se existisse algo, seria bom. =)

SELECT campo1
,campo2
,SUBSTRING( campo3 , 1 , CASE INSTR(campo3,CHAR(13)) WHEN 0 THEN LENGTH(TRIM(campo3)) ELSE INSTR(campo3,CHAR(13))-1 END ) AS campo3
FROM tabela

Ou seja, se não achar o CHAR(13) na String, retorna a String toda, caso ache, retorna a String, da posição 1, até a posição do CHAR(13) -1

  • Moderador
Postado

Erciley, já considerou a possibilidade de criar algum tipo de função, que você passe parametros?

Não tenho um conhecimento tão aprofundado em SQL como você mas a ideia seria algo do tipo:


nomeFuncao(parametros){

codigo

}

eai chamar numa consulta a função... ou seria o nome correto de store procedures?

corrija-me se eu estiver errado.. bem fica aí dica, talvez possa clarear suas ideias.

abraço

Postado

Olá DIF.

Então, poderia sim, criar uma FUNCTION nos moldes da IFNULL, só não faço isso, porque teria que criar essa FUNCTION em todos os clientes que utilizam o sistema.

Isso também não seria um problema, mas infelizmente, o pessoal não tem o costume de criar FUNCTION´s nem SP no banco dos clientes, até porque, isso poderia implicar em outros problemas (o "DBA" apagar algo por exemplo ¬¬)

Mas a dica é válida sim, obrigado.

  • Moderador
Postado

Então pensando em outra solução, já considerou a possibilidade também de fazer isso diretamente na linguagem naqual estás programando?

as vezes criando uma classe ou uma function que seja re-utilizável quantas vezes você quiser?

por exemplo no php, eu costumo criar classes contendo funções que possam ser chamada N vezes.. sendo assim, bastando importar a classe na linguagem e utilizar as functions da classe criada.

Enfim, boa sorte na sua jornada! rsrsr

forte abraço.

Postado

Então DIF, já pensei nisso também, hehehehe, é que fazer isso, neste caso em específico, seria perder um pouco de performance.

Mas mais uma vez, obrigado pela ajuda =)

E desculpe a demora em responder, só vi agora a nova resposta. Abraço.

  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!