SQL de la Conversion de la Colonne type de données float varchar
J'essaye de modifier le type de données dans une colonne dans une table à partir de Float
(null) pour Varchar(25)
(null). Le plus grand flotter dans le courant de données est de 12 chiffres, mais les chiffres peuvent être ajoutés dans le futur, d'où varchar(25)
.
Les données actuelles dans la colonne des numéros de téléphone. Le changement doit être fait pour permettre précédent zéros.
Cependant, je vais avoir quelques difficultés à faire.
J'ai essayé ce qui suit:
ALTER TABLE Customer
ALTER COLUMN Phonenumber varchar(25)
Cela ne me donne pas le résultat souhaité.
Par exemple 1549779498
devient 1.54978e+009
Puis j'ai essayé quelque chose dans les lignes de ce:
- La création d'une nouvelle (temporaire) de la colonne
PhonenumberVarchar
- De convertir et de copier les données d'une colonne à l'autre
- La suppression de l'ancienne colonne
- De renommer la nouvelle colonne à l'ancien nom
Code:
ALTER TABLE Customer
ADD PhonenumberVarchar varchar(25)
UPDATE Customer
SET PhonenumberVarchar = STR(Phonenumber, 12, 0)
ALTER TABLE Customer
DROP COLUMN Phonenumber
EXEC sp_rename 'Customer.PhonenumberVarchar', 'Phonenumber', 'COLUMN'
Cela ne fonctionne pas non plus:
Sous-requête a renvoyé plus de valeur 1. Ce n'est pas permis lorsque la sous-requête suit =, !=, <, <= , >, >= ou lorsque la sous-requête est utilisée comme une expression.
Et maintenant il est tard et ma tête me fait mal...
Peut aider quelqu'un?
REMARQUE:
La table est assez grande, environ 1,5 million de lignes, de sorte que la performance peut être un problème.
À l'aide de SQL Server.
OriginalL'auteur user2110298 | 2015-08-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez résoudre ce problème en passant par un
decimal
première:Vous obtenez le même comportement lors de l'utilisation de
cast()
:Ainsi, le correctif est illustré par:
La la documentation pour
alter table alter column
explicitement référence à descast()
:EDIT:
Une fois que vous chargez les données, je vous suggère également d'ajouter une contrainte de vérification:
Cela permettra d'assurer que les numéros de -- et seuls les chiffres restent dans la colonne à l'avenir.
Oui, même si je ne suis pas sûr qu'ils sont exactement les erreurs d'arrondi. La représentation utilisée pour la conversion n'est pas ce que vous voulez, et c'est un moyen relativement simple autour de cette question.
OriginalL'auteur Gordon Linoff
OriginalL'auteur Nickthename