none
copiar uma coluna para outra RRS feed

  • Pergunta

  • ppl preciso do seguinte

    tenho uma coluna com valores numericos, com virgula e sem virgula.

    Mas a coluna está formatada como nvarchar(max). 

    Queria criar uma coluna chamada numero que copia-se para la os dados mas na forma de numero, para depois fazer calculos com eles.

    primeira questão:

    como deve ser formatada a coluna numero

    como copio o valor para a coluna numero e converto de nvarchar(max) para o formato de numero


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 4 de abril de 2012 16:18

Respostas

  • Flashed,

    Indico os tipos FLOAT  ou NUMERIC (o número de casas decimais depende da precisão que você necessita nos dados).

    Para copiar os valores, pode usar o UPDATE, como no exemplo abaixo.

    UPDATE MinhaTabela
    SET Numero = CONVERT(FLOAT, ColNVarchar)

    onde MinhaTabela é o nome da sua tabela e ColNVarchar é o nome da coluna que possui os dados originais.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */


    quarta-feira, 4 de abril de 2012 16:30
  • Boa tarde Flashed,

    Neste caso será necessário usar o replace para trocar a virgula pelo ponto, e se tiver dados não númericos na coluna em questão será necessário colocar a clausula where ISNUMERIC(nomedacoluan) = 1 para assim trazer somente dados númericos.

    Veja se o exemplo abaixo te ajuda e é o que você precisa.

    -- Criando tabela CREATE TABLE TABELA_NUMERO( COLUNA_VARCHAR_MAX NVARCHAR(MAX) ); -- Insert INSERT INTO TABELA_NUMERO VALUES('123,25'); INSERT INTO TABELA_NUMERO VALUES('456,32'); INSERT INTO TABELA_NUMERO VALUES('12.95'); INSERT INTO TABELA_NUMERO VALUES('TESTE123'); INSERT INTO TABELA_NUMERO VALUES('32,95'); -- ADD UMA COLUNA NOVA ALTER TABLE TABELA_NUMERO ADD COLUNA_NUMERO FLOAT; -- UPDATE UPDATE TABELA_NUMERO SET COLUNA_NUMERO = CAST(REPLACE(COLUNA_VARCHAR_MAX,',','.') AS FLOAT) WHERE ISNUMERIC(COLUNA_VARCHAR_MAX)=1 /* -- COmando para dropar a tabela de testes. DROP TABLE TABELA_NUMERO */

    Adriano
    quarta-feira, 4 de abril de 2012 16:55

Todas as Respostas

  • Flashed,

    Indico os tipos FLOAT  ou NUMERIC (o número de casas decimais depende da precisão que você necessita nos dados).

    Para copiar os valores, pode usar o UPDATE, como no exemplo abaixo.

    UPDATE MinhaTabela
    SET Numero = CONVERT(FLOAT, ColNVarchar)

    onde MinhaTabela é o nome da sua tabela e ColNVarchar é o nome da coluna que possui os dados originais.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */


    quarta-feira, 4 de abril de 2012 16:30
  • formatei a coluna numero com float

    a precisão é de uma casa decimal, não mais que isso.

    exprimentei e deu este erro:

    Error converting data type nvarchar to float.

    n percebo porque!!!! :/


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 4 de abril de 2012 16:38
  • Boa tarde Flashed,

    Neste caso será necessário usar o replace para trocar a virgula pelo ponto, e se tiver dados não númericos na coluna em questão será necessário colocar a clausula where ISNUMERIC(nomedacoluan) = 1 para assim trazer somente dados númericos.

    Veja se o exemplo abaixo te ajuda e é o que você precisa.

    -- Criando tabela CREATE TABLE TABELA_NUMERO( COLUNA_VARCHAR_MAX NVARCHAR(MAX) ); -- Insert INSERT INTO TABELA_NUMERO VALUES('123,25'); INSERT INTO TABELA_NUMERO VALUES('456,32'); INSERT INTO TABELA_NUMERO VALUES('12.95'); INSERT INTO TABELA_NUMERO VALUES('TESTE123'); INSERT INTO TABELA_NUMERO VALUES('32,95'); -- ADD UMA COLUNA NOVA ALTER TABLE TABELA_NUMERO ADD COLUNA_NUMERO FLOAT; -- UPDATE UPDATE TABELA_NUMERO SET COLUNA_NUMERO = CAST(REPLACE(COLUNA_VARCHAR_MAX,',','.') AS FLOAT) WHERE ISNUMERIC(COLUNA_VARCHAR_MAX)=1 /* -- COmando para dropar a tabela de testes. DROP TABLE TABELA_NUMERO */

    Adriano
    quarta-feira, 4 de abril de 2012 16:55
  • Adriano se voce fosse uma rapariga dava-lhe um beijo :) hehe

    obrigada, mt obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 4 de abril de 2012 16:57
  • Flashed, desculpe.

    Quando li seu questionamento, não atentei para o fato dos dados estarem separados por vírgula.

    A resposta do Adriano cabe perfeitamente para o que quer fazer.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quarta-feira, 4 de abril de 2012 16:58
  • não faz mal Mariana ;)

    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quarta-feira, 4 de abril de 2012 17:01