none
Pegar um range de string ou valor tipo (125.87) quero somente o 125 ou 87 RRS feed

  • Pergunta

  • Ola, espero que alguem tenha uma luz

    Quero pegar de uma campo money parte do valor (string)  por exemplo tenho la neste campo float 78.4521

    quero fazer um select assim

    Select inteiro(125.87) as Inteiro -- que retorne somente o 125

    Select decimal(125.87) as decimal -- que retorne 87

    usar cast vai arredondar o inteiro e como pegar somente o valor "decimal"?

     

    quarta-feira, 24 de março de 2010 17:27

Respostas

  • Clodoaldo,

    Segue um exemplo.

    declare @v as table (valor money)
    insert into @v values(125.87)
    insert into @v values(15.687)
    insert into @v values(1225.756)
    
    --select substring(cast(@v as varchar),0,patindex('%.%',cast(@v as varchar)))
    select cast(convert(decimal(20,3),valor)as CHAR(20)), substring(cast(convert(decimal(20,3),valor)as CHAR(20)),patindex('%.%',cast(convert(decimal(20,3),valor)as CHAR(20)))+1,len(valor)) from @v
    



    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 26 de março de 2010 12:29

Todas as Respostas

  • Boa Tarde,

    Segue uma sugestão:

    declare @v money
    set @v = 125.87
    select case when CAST(@v as int) > @v then CAST(@v as int) - 1 else CAST(@v as int) end as parteinteira,
     abs(case when CAST(@v as int) > @v then CAST(@v as int) - 1 else CAST(@v as int) end - @v) as partedecimal

    Certamente haverão outras sugestões, pois, tenho a impressão de que a minha não é a melhor implementação.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como descobrir a data do último acesso a uma tabela ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!964.entry


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 24 de março de 2010 17:48
  • Obrigado por responder

    Consegui fazendo uma gambiarra aqui...

    select

     

    cast(12.254 as int), right(cast(12.254 as decimal(10,2)),2)

    é q eu naum queria o "zero virgula qualquer coisa"(0,999)

    quarta-feira, 24 de março de 2010 19:23
  • outra maneira... mais prático no pois nao defino uma quantidade de caracteres, divido pelo . da casa decimal.

    declare @v money
    set @v = 125.87
    
    select substring(cast(@v as varchar),0,patindex('%.%',cast(@v as varchar)))
    select substring(cast(@v as varchar),patindex('%.%',cast(@v as varchar))+1,len(@v))
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 24 de março de 2010 21:17
  • bom dia segue mais uma sugestão:

     

    -- declarando tabela temporária
    declare @t table (valor money)
    
    -- populando a tabela
    INSERT @t 
          SELECT 125.87 
    UNION SELECT 200.00 
    UNION SELECT 1.01
    
    -- resultado final separando os valores
    select 
        Valor, 
        [Inteiro]  = cast(floor(valor) AS INT),
        [Decimal]  =  cast((valor - floor(valor)) * 100 AS INT)
    from 
        @t
    
    

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    quinta-feira, 25 de março de 2010 13:09
  • Obrigado a todos por responder,

     

    ai Marcelo como ficaria para pegar todas as casa depois do"." ? sem arredondar

     

    abs

    quinta-feira, 25 de março de 2010 14:32
  • Clodoaldo,

    Segue um exemplo.

    declare @v as table (valor money)
    insert into @v values(125.87)
    insert into @v values(15.687)
    insert into @v values(1225.756)
    
    --select substring(cast(@v as varchar),0,patindex('%.%',cast(@v as varchar)))
    select cast(convert(decimal(20,3),valor)as CHAR(20)), substring(cast(convert(decimal(20,3),valor)as CHAR(20)),patindex('%.%',cast(convert(decimal(20,3),valor)as CHAR(20)))+1,len(valor)) from @v
    



    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 26 de março de 2010 12:29
  • Clodoaldo segue mais um exemplo:

    Declare @Tmp Table (Numero Decimal(12,2))
    
    Insert Into @Tmp Values (128.94)
    Insert Into @Tmp Values (55.75)
    Insert Into @Tmp Values (597.98)
    
    Select Substring(Cast(Numero As Char),CharIndex('.',Numero)+1,len(Numero)) From @Tmp

    Espero ter ajudado...

     

    Att,

    Fernando Willian de Souza Furtado

     

    Se Útil Classifique...

    quinta-feira, 8 de abril de 2010 19:05