Ir para conteúdo

Arquivado

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

Ericsson Berg

Substituir e calcular fórmula em string com valores de uma consulta no DB

Recommended Posts

Iai Pessoal, postando pela primeira vez aqui nesta área!!

 

Tenho uma situação muito complicada para resolver e gostaria da ajuda de vocês.

 

Como substituir os dados de uma fórmula que está em string pelo resultado de consultas no banco de dados?

 

Os números que estão na fórmula correspondem aos dados de uma tabela onde preciso trazer o valor como retorno.

 

Select codrelatorio, situacao,  formula

Select 10, "teste", "([981] + [988]) / [700]" formula

 

Ex.: Pegar o número 981 e realizar uma consulta em uma tabela, retornando assim o valor 1090.01;

begin
@valor = SELECT v.valor FROM table_exemplo WHERE codigo = 981

return @valor;
end

Fórmula: (1090.01 + [988]) / [700]

 

E assim por diante até ter todos os números da fórmula substituídos e ter este resultado:

 

Select 10, "teste", (1090.01 + 150) / 55  formula

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido.

 

Mamão com açúcar caso alguém precise um dia.

 

Fica faltando executar a soma, nisto ainda estou quebrando a cabeça. 

 

Caso alguém saiba como realizar a soma de uma operação que está como string no mysql, por favor me ajude.

 

Equivale a função eval() do javascript.

select convert_formula("[792]+[793]+[794]+[795]+[911]+[912]") as valor;
Function

CREATE DEFINER=`hoster`@`%` FUNCTION `convert_formula`(formula varchar(255)) RETURNS varchar(555) CHARSET latin1
BEGIN
SET @newformula = formula;
SET @limitador_loop = quantCaracter(formula,"[");
SET @count = 1;
 
     WHILE(@count <= @limitador_loop) DO
     
      SET @cod_derex = substring_index(substring_index(formula,']',@count),'[',-1) ;
      SELECT valor FROM tmp_relger WHERE cod_derex = @cod_derex INTO @valor;
      SET @newformula = REPLACE(@newformula,@cod_derex,@valor); 
      SET @count = @count+1;

     END WHILE; 

     SET @newformula = REPLACE(REPLACE(@newformula,'[',''),']','');

RETURN  @newformula;
END
Function

CREATE DEFINER=`hoster`@`%` FUNCTION `quantCaracter`(x varchar(255), delim varchar(12)) RETURNS int(11)
BEGIN

RETURN (length(x)-length(REPLACE(x, delim, '')))/length(delim);
END

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Leandro T.
      pessoal bom dia alguém poderia me ajudar com o FormValidation?
       
      "nomefuncionario": {
                  validators: {
                      
                  
                    notEmpty: {
                      message: "Nome completo do funcionário é obrigatório."
                    } , <=== este funciona normalmente
                      
                      callback: {  // agora o callback nao consigo fazer funcionar
                              message: 'este nome não é valido',
                              callback: function (input) {
                                  if (input.value = 'algum valor digitado') {
                                      return true
                                  } }},
                      
                      
                      
                  }
    • Por nathanmoreira
      Após diversos cálculos provindos de um código, recebo um número inteiro ao qual não sei o tamanho ao certo (pode variar de 1 pra frente). Quero passar esse número para string e formatar ele de maneira a colocar um ,00 no final e, a cada 3 números antes da virgula, um ponto. Ou seja, deixar o número num formato como: 45.114.477,00
       
      Como fazer? 
    • Por TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por clayton.lima2020
      Boa Tarde!
       
      Pessoal estou com um problema para resolver:
       
      Tenho um uma string que é um Nome:  SYLVIA
       
      Eu preciso fazer uma uma busca nessa string achar a letra Y e depois verificar se após a letra Y a próxima letra é Vogal ou Consoante.
       
      No caso do nome SYLVIA a próxima letra é L então retorna Consoante.
       
      Alguém sabe montar esse algoritmo ai?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.