none
Query - quantidade RRS feed

  • Pergunta

  • Galera, bom dia.

    Como eu poderia estar montando essa query?

    Tenho um campo no meu banco de dados dsNumeroCartao Varchar(50)

    Tenho uma aplicação que gera um valor aleatório dentro desse campo.

    Tenho um valor inicial de 99988579 e um valor final de 99999999, minha query teria que mostrar a quantidade restante entre esses valores.

    Obrigado.

    segunda-feira, 25 de maio de 2015 15:07

Respostas

  • Felipe,

         Primeira coisa em relação a sua necessidade. Seu tipo de dado está errado! Ele não deve (Não mesmo!!) ser do tipo varchar(50) quando você quer armazenar um valor inteiro!!!! Para não perder o foco, apenas vou dizer para você que isso impacta a sua performance. Então repense cuidadosamente essa sua estrutura.

         Depois que você resolver esse problema de design na sua base, você pode fazer o seguinte:

    -- Criando a tabela create table #Cartoes (id int identity, NumeroCartao int) -- Populando com alguns valores aleatórios insert into #Cartoes (NumeroCartao) values (99988579) insert into #Cartoes (NumeroCartao) values (99988689) insert into #Cartoes (NumeroCartao) values (99988799) insert into #Cartoes (NumeroCartao) values (99988679) insert into #Cartoes (NumeroCartao) values (99988779) insert into #Cartoes (NumeroCartao) values (99988879) -- declarando os valores inicial e final declare @NumeroCartaoInicial int = 99988579, @NumeroCartaoFinal int = 99999999 -- fazendo select para recuperar a quantidade de números restantes -- resultado 11413 select @NumeroCartaoFinal - @NumeroCartaoInicial - (Select count(*) from #Cartoes where NumeroCartao between @NumeroCartaoInicial and @NumeroCartaoFinal)

    -- Caso você insista em manter a sua base da forma errada, utilize este script

    declare @NumeroCartaoInicial varchar(50) = '99988579', @NumeroCartaoFinal varchar(50) = '99999999'
    select convert(int, @NumeroCartaoFinal) - convert(int, @NumeroCartaoInicial) - (Select count(*) from #Cartoes 
     where NumeroCartao between @NumeroCartaoInicial and @NumeroCartaoFinal)

    -- inserindo um novo valor aleatório insert into #Cartoes (NumeroCartao) values (99988892) -- fazendo um novo select com a nova quantidade de números restantes -- resultado = 11413 select @NumeroCartaoFinal - @NumeroCartaoInicial - (Select count(*) from #Cartoes where NumeroCartao between @NumeroCartaoInicial and @NumeroCartaoFinal) -- Removendo a tabela temporária drop table #Cartoes



    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    segunda-feira, 25 de maio de 2015 16:55
    Moderador

Todas as Respostas

  • Seria mais ou menos dessa forma:

    SELECT (VALORINICIAL-VALORFINAL) AS RESTANTE FROM SUA_TABELA
    OBS: Vai ter que converter para poder fazer esse calculo a variavel

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    segunda-feira, 25 de maio de 2015 15:28
  • Se eu entendi direito, voce possui uma tabela onde vc armazena vaores aleatorios entre 99988579 e 99999999. O que eu entendi é que vc quer saber, apos uma certa quantidade de inserçoes, quantos valores ainda restam para inserir na tabela? É isso?

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 25 de maio de 2015 15:51
  • Felipe,

         Primeira coisa em relação a sua necessidade. Seu tipo de dado está errado! Ele não deve (Não mesmo!!) ser do tipo varchar(50) quando você quer armazenar um valor inteiro!!!! Para não perder o foco, apenas vou dizer para você que isso impacta a sua performance. Então repense cuidadosamente essa sua estrutura.

         Depois que você resolver esse problema de design na sua base, você pode fazer o seguinte:

    -- Criando a tabela create table #Cartoes (id int identity, NumeroCartao int) -- Populando com alguns valores aleatórios insert into #Cartoes (NumeroCartao) values (99988579) insert into #Cartoes (NumeroCartao) values (99988689) insert into #Cartoes (NumeroCartao) values (99988799) insert into #Cartoes (NumeroCartao) values (99988679) insert into #Cartoes (NumeroCartao) values (99988779) insert into #Cartoes (NumeroCartao) values (99988879) -- declarando os valores inicial e final declare @NumeroCartaoInicial int = 99988579, @NumeroCartaoFinal int = 99999999 -- fazendo select para recuperar a quantidade de números restantes -- resultado 11413 select @NumeroCartaoFinal - @NumeroCartaoInicial - (Select count(*) from #Cartoes where NumeroCartao between @NumeroCartaoInicial and @NumeroCartaoFinal)

    -- Caso você insista em manter a sua base da forma errada, utilize este script

    declare @NumeroCartaoInicial varchar(50) = '99988579', @NumeroCartaoFinal varchar(50) = '99999999'
    select convert(int, @NumeroCartaoFinal) - convert(int, @NumeroCartaoInicial) - (Select count(*) from #Cartoes 
     where NumeroCartao between @NumeroCartaoInicial and @NumeroCartaoFinal)

    -- inserindo um novo valor aleatório insert into #Cartoes (NumeroCartao) values (99988892) -- fazendo um novo select com a nova quantidade de números restantes -- resultado = 11413 select @NumeroCartaoFinal - @NumeroCartaoInicial - (Select count(*) from #Cartoes where NumeroCartao between @NumeroCartaoInicial and @NumeroCartaoFinal) -- Removendo a tabela temporária drop table #Cartoes



    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    segunda-feira, 25 de maio de 2015 16:55
    Moderador
  • Vlw galera, muito obrigado!!
    segunda-feira, 25 de maio de 2015 20:44