Jump to content
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

 

 

Share this post


Link to post
Share on other 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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Santos_2015
      tenho array que está sendo preenchido assim:
      $dados = array([0] => "Nome",[1] => "SobreNome",[2] => "null"); queria que ficasse dessa forma:
      $dados = array([0] => "Nome",[1] => "SobreNome",[2] => null); pois estou extraindo os valores do array com array_values  pra colocar em um INSERT, os campos que podem ser null são do tipo date(BD mysql),
      então tenho que retirar as aspas quando o valor vier null , ou no próprio array, ou após o array_values, alguma sugestão?  
    • By camargo.2018
      Olá, tudo bem?
      alguém pode me ajudar tipo
      TIPO=Produto&ID=4|TIPO=Produto&ID=4|TIPO=Domain&name=canargo&tls=.com|TIPO=Produto&ID=4 Quero pegar isso e transformar nisso
      for($i = 0; $i <= $quantidade;$i++){ if($produto[tipo][$i] == "Produto"){ $idProduto[$i] = $produto[ID][$i]; }elseif($produto[tipo][$i] == "Domain"){ $NameDomain[$i] = $produto[name][$i]; $TlsDomain[$i] = $produto[tls][$i]; } } alguém pode me ajudar ou se conhece outro método. 
    • By felipems98
      Olá, esse e meu primeiro post no forum, estou com problema para manipular dados recebidos de um arquivo
      Eu quero capturar esses dados e salvar em um variavel, podem com o fgets() eu so consigo printar na tela pois quando vai passar pra outra variavel ele so pega o ultimo caracter.
      Segue a baixo o codigo:
      void main(){ FILE *pont_arquivo; char caminho[100]; char tx[100]; //char c; char texto[100]; int i; //define e abre o arquivo que será formatado printf("coloque o caminho do arquivo que queira abrir\n"); gets(caminho); pont_arquivo = fopen(caminho, "r"); if (pont_arquivo == NULL){ printf ("ERRO: arquivo não encontrado ou sem permissão de acesso.\n"); exit(0); } printf("arquivo aberto.\n"); while(fgets(tx, 100, pont_arquivo) != NULL){ for( i=0; i< sizeof(tx); i++) texto[i] = tx[i]; } fclose(pont_arquivo); printf("%s", texto); } O print consegue retornar todos os valores do arquivo mas não consigo passar eles para uma variável e tratar dentro do código.
      ja tentei com strcpy e esse exemplo eu mandei com for pra atribuir um a um os dados, mas não consegui com nenhum dos dois.
      A baixo tem os dados do arquivo txt:
      teste{ sjdoasijd,xy jsioadja,xy jsiadj,xy ois,xy djsia,xy dijodajsi,xy jiosjodia,xy jbf23,xy 21,xy 21983,xy moisdoia,xy mh8293,xy ajksnd,xy ioaasd,xy }  
    • By Icaro Luan
      error
    • By FMonteiro
      Estou com um problema na chamada de uma função criada em uma classe. 
      Ao fazer a chamada da função, recebo uma mensagem de que a função não existe. 
      A mensagem de erro é: 
      "Fatal error: Uncaught Error: Call to undefined function EXECUTAR() in C:\...\cls_bd.php:154 Stack trace: #0 C:\...\cls_mail.php(99): bd->INSERIR('tbmensagens', 'data,hora,nome,...', 'DATE_FORMAT((se...', NULL) #1 C:\...\cls_mail.php(108): GRAVAR_EMAIL('Empresa Produto...', 'lu@gmail.com', '3230833394', 'Nome: Empresa P...') #2 C:\...\cls_contato.php(31): ENVIAR_GRAVAR_EMAIL('Empresa Produto...', 'lu@gmail.com', '3230833394', 'Nome: Empresa P...') #3 {main} thrown in C:\...\cls_bd.php on line 154"
      Na foto em anexo, há o script criado com a chamada da função (linha 154) e da função criada (linha 123).
      Será que alguém pode jogar uma luz no assunto para mim?

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.