Usuário com melhor resposta
copiar uma coluna para outra

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
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 */
- Editado Mariana Del Nero quarta-feira, 4 de abril de 2012 16:31 Formatação
- Marcado como Resposta Jonas São Paulo quarta-feira, 4 de abril de 2012 16:58
-
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.
Adriano-- 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 */
- Sugerido como Resposta Mariana Del Nero quarta-feira, 4 de abril de 2012 16:57
- Marcado como Resposta Jonas São Paulo quarta-feira, 4 de abril de 2012 16:57
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 */
- Editado Mariana Del Nero quarta-feira, 4 de abril de 2012 16:31 Formatação
- Marcado como Resposta Jonas São Paulo quarta-feira, 4 de abril de 2012 16:58
-
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
-
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.
Adriano-- 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 */
- Sugerido como Resposta Mariana Del Nero quarta-feira, 4 de abril de 2012 16:57
- Marcado como Resposta Jonas São Paulo 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 */
-