none
Campo com formula RRS feed

  • Pergunta

  • Boa tarde!!!

    Tenho a seguinte situação em uma tabela armazeno em um campo varchar uma formula que será calculada posteriormente, para cada linha pode ser uma formula diferente

    Abaixo segue exemplo

    ITEM      Produto                               Formula Altura          Formula Largura

      01    |   V.TEMP. INC 10MM INST.   | @ALTURA1 - 51     |   @LARGURA / 2 + 50  
      02    |   V.TEMP. INC 10MM CAIX.  | @ALTURA1 - 35     |    @LARGURA / 2 + 60

    Quero pegar o valor da coluna Formula Altura e Formula Largura e resolver com o proprio SQL

    Declare @ALTURA1 as INT
    Declare @LARGURA as INT

    Set @ALTURA1 = 1500
    Set @LARGURA = 1800

    Select
        Prjite.CdPrjite
    ,    Prjite.CdPrj
    ,    Prjite.NrPrjOrd
    ,    Prjite.NrProCao   
    ,    Prjite.NmPro
    ,    Prjite.TtPrjiteFormAlt
    ,    Altura = Replace(Prjite.TtPrjiteFormAlt,'@ALTURA1',@ALTURA1)
    ,    Altura = @ALTURA1 + ' ' + Convert(int,Replace(Prjite.TtPrjiteFormAlt,'@ALTURA1',''))
    ,    Prjite.NrPrjiteAltX
    ,    Prjite.NrPrjiteAltY
    ,    Prjite.TtPrjiteFormLar
    --,    Largura = @LARGURA + ' ' + Convert(int,Replace(Prjite.TtPrjiteFormLar,'@LARGURA',''))
    ,    Prjite.NrPrjiteLarX
    ,    Prjite.NrPrjiteLarY
    From TbPrj Prj
    Inner Join TbPrjite Prjite On Prjite.CdPrj = Prj.CdPrj
    Where
            Prj.CdPrj = '20'

    sábado, 13 de agosto de 2016 19:45

Respostas

Todas as Respostas

  • Deleted
    sábado, 13 de agosto de 2016 23:20
  • Deleted
    domingo, 14 de agosto de 2016 13:03
  • Bom dia!!!

    José Diz

    Obrigado pela atenção

    Meu campo chave primaria na tabela TbPrjite é CdPrjite

    segunda-feira, 15 de agosto de 2016 09:51
  • Deleted
    segunda-feira, 15 de agosto de 2016 11:43
  • Cara pelo que eu entendi vc precisa calcular sua variável, se for isso é só utilizar os operadores

      
    select 
    
    ...
    
    
    cast(@ALTURA1 as float) - <numero desejado>
    
    cast(@LARGURA as float) / <numero desejado> + <numuro desejado>
    
    

    segunda-feira, 15 de agosto de 2016 12:44
  • Jose Diz

    No meu caso vou precisar criar um função para resolver essa expressão porem que nao me falhe a memória nao posso usar SQL Dinâmico dentro de uma function

    segunda-feira, 15 de agosto de 2016 19:43
  • Deleted
    segunda-feira, 15 de agosto de 2016 19:55
  • Jose Diz

    Cara obrigado pela norte que voce me deu

    achei um artigo que ainda nao testei, mas aparentemente caiu como luva

    :)

    Abaixo o codigo

    CREATE FUNCTION dbo.EvaluateExpression(@list nvarchar(MAX)) RETURNS Decimal(10,2) AS BEGIN Declare @Result Decimal(10,2) set @Result=1 DECLARE @pos int, @nextpos int, @valuelen int SELECT @pos = 0, @nextpos = 1 WHILE @nextpos > 0 BEGIN SELECT @nextpos = charindex('*', @list, @pos + 1) SELECT @valuelen = CASE WHEN @nextpos > 0 THEN @nextpos ELSE len(@list) + 1 END - @pos - 1 Set @Result=@Result*convert(decimal(10,2),substring(@list, @pos + 1, @valuelen)) SELECT @pos = @nextpos END RETURN @Result END

    Exemplo de uso

    Select dbo.EvaluateExpression('10*4.5*0.5')

    Agora tenho que tratar os demais operadores / + -
    segunda-feira, 15 de agosto de 2016 20:09
  • Deleted
    segunda-feira, 15 de agosto de 2016 21:09
  • kkkk

    Pois e testei aqui so multiplica

    Vou tentar dar uma alterada na lógica dessa função para ver se consigo algo, senão vou ter que tratar na linguagem do Front End

    Se voce achar algo que me ajude por favor me dar um toque

    Obrigado!

    segunda-feira, 15 de agosto de 2016 21:27