none
Como inserir uma virgula no meio dos numeros de uma coluna inteira RRS feed

  • Pergunta

  • Eu tenho um coluna que está preenchida com numeros, por exemplo "78 880000000000 "
    só que ele na verdade era para ser, por exemplo, "78,880". Tem como eu inserir uma virgula depois do 12º numero da direita para a esquerda?

    A única certeza que eu tinha é que a vírgula fica entre o 12° e o 13° da direita para esquerda em relação a quem está olhando para o monitor.

    se for ficar mais fácil para vocês visualizarem eu retiro os 9 primeiros números da direita para a esquerda ficando "78880" assim eu tenho que colocar a vírgula em todos os números dessa coluna entre o 3° e o 4º da direita para a esquerda "78, 880

    Estou sempre falando da direita para esquerda por que no caso de eu ter um numero "1244500000000000" no banco vou ter que converter para "1244,500"

    e agora como eu faço.

    O banco é SQL SERVER 2005
    sábado, 13 de março de 2010 11:58

Respostas

  • faça a conversão.
    segue exemplo:

    CREATE TABLE #TEMP (NumGrande numeric,NumCerto numeric)
     
    INSERT INTO #TEMP (NumGrande)
    VALUES (1244500000000000)
    
    INSERT INTO #TEMP (NumGrande)
    VALUES (78880000000000)
    
    UPDATE #TEMP
    SET NumCerto= reverse(stuff(reverse(cast(NumGrande as varchar(max))),13,0,'.'))
    
    SELECT * 
    FROM #TEMP
    

     


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Sugerido como Resposta Leonardo Marcelino sábado, 13 de março de 2010 18:23
    • Marcado como Resposta ShaManPablo domingo, 14 de março de 2010 03:43
    sábado, 13 de março de 2010 18:15

Todas as Respostas

  • Bom dia, segue um exemplo de como fazer.

    -- criando tabela temporária
    declare @t table (num varchar(80))
    
    -- populando a tabela
    insert into @t 
    select '78880000000000' union 
    select '1244500000000000'
    
    -- formatando o numero
    select 
        num, 
        Num_Novo = reverse(stuff(reverse(num),13,0,','))  
    from @t
    

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    sábado, 13 de março de 2010 14:18
  • Funcionou perfeitamente, porem os meus campos são numericos
    e eu queria modificar ele. Eu tentei

    CREATE TABLE #TEMP (NumGrande numeric,NumCerto numeric)
     
    INSERT INTO #TEMP
    (NumGrande)
    VALUES
    (1244500000000000)
    INSERT INTO #TEMP
    (NumGrande)
    VALUES
    (78880000000000)
    
    UPDATE #TEMP
    SET NumCerto= reverse(stuff(reverse(NumGrande),13,0,'.'))
    
    
    SELECT * FROM #TEMP
    Mas o meu resultado foi esse, como eu recupero os valores após o ponto.


    NumGrande                NumCerto
    78880000000000        79
    1244500000000000    1245

    PS: Eu preciso usar "." pra seperar casa decimal, falha minha
    sábado, 13 de março de 2010 17:40
  • faça a conversão.
    segue exemplo:

    CREATE TABLE #TEMP (NumGrande numeric,NumCerto numeric)
     
    INSERT INTO #TEMP (NumGrande)
    VALUES (1244500000000000)
    
    INSERT INTO #TEMP (NumGrande)
    VALUES (78880000000000)
    
    UPDATE #TEMP
    SET NumCerto= reverse(stuff(reverse(cast(NumGrande as varchar(max))),13,0,'.'))
    
    SELECT * 
    FROM #TEMP
    

     


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Sugerido como Resposta Leonardo Marcelino sábado, 13 de março de 2010 18:23
    • Marcado como Resposta ShaManPablo domingo, 14 de março de 2010 03:43
    sábado, 13 de março de 2010 18:15
  • A solução proposta pelo Leonardo está ótima e consegui solucionar meu problema, mas é preciso uma pequena correção. O campo que vai receber o novo numero, tem que específica as casas décimas, se não ele vai arredondar e você perde os valores após o "ponto".


    Fica assim:

    CREATE TABLE #TEMP (NumGrande numeric,NumCerto numeric(20,2))
     
    INSERT INTO #TEMP (NumGrande)
    VALUES (1244500000000000)
    
    INSERT INTO #TEMP (NumGrande)
    VALUES (78880000000000)
    
    UPDATE #TEMP
    SET NumCerto = reverse(stuff(reverse(cast(NumGrande as varchar(max))),13,0,'.'))
    
    SELECT *
    FROM #TEMP

    domingo, 14 de março de 2010 03:42