jeter ou convertir un flotteur en nvarchar?

Je dois sélectionner une colonne de type float et l'insert dans une autre colonne comme nvarchar.

J'ai essayé de le lancer: cast([Column_Name] as nvarchar(50))

Le résultat était 9.07235e+009 au lieu d'un numéro à 10 numbers (numéro de téléphone).

Est-ce que quelqu'un sait comment lancer ou convertir ces données correctement?

Vérifiez STR . Vous avez besoin de quelque chose comme SELECT STR([Column_Name],10,0) ** Il s'agit d'une solution SQL Server, car les autres servers vérifient leurs documents.

Si vous stockez des numéros de téléphone dans une colonne tapée à la volée (ce qui est une mauvaise idée), ils sont vraisemblablement tous des entiers et peuvent être castés en int avant d'être lancés sur nvarchar.

Donc, au lieu de:

 select cast(cast(1234567890 as float) as nvarchar(50)) 1.23457e+009 

Vous utiliseriez:

 select cast(cast(cast(1234567890 as float) as int) as nvarchar(50)) 1234567890 

Dans ces exemples, le cast(1234567890 as float) le plus profond cast(1234567890 as float) est utilisé à la place de la sélection d'une valeur dans la colonne appropriée.

Je recommand vraiment que vous ne stockez pas les numéros de téléphone dans les flotteurs bien!
Que faire si le numéro de téléphone commence par un zéro?

 select cast(0100884555 as float) 100884555 

Oups! Nous avons juste stocké un numéro de téléphone incorrect …

N'utilisez pas de flottants pour stocker des données à précision fixe requirejses. Cet exemple montre comment convertir un float en NVARCHAR (50) correctement, tout en montrant pourquoi c'est une mauvaise idée d'utiliser des floats pour des données de précision.

 create table #f ([Column_Name] float) insert #f select 9072351234 insert #f select 907235123400000000000 select cast([Column_Name] as nvarchar(50)), --cast([Column_Name] as int), Arithmetic overflow --cast([Column_Name] as bigint), Arithmetic overflow CAST(LTRIM(STR([Column_Name],50)) AS NVARCHAR(50)) from #f 

Sortie

 9.07235e+009 9072351234 9.07235e+020 907235123400000010000 

Vous pouvez remarquer que la 2ème sortie se termine par '10000' même si datatables que nous avons essayé de stocker dans la table se terminent par '00000'. C'est parce que le type de données float a un nombre fixe de numbers significatifs pris en charge, ce qui ne va pas aussi loin.

DECLARE @MyFloat [float]

SET @MyFloat = 1000109360.050

SELECT REPLACE (RTRIM (REMPLACE (REMPLACE (RTRIM ((REMPLACE (CAST (CAST (@MyFloat AS DECIMAL (38, 18)) AS VARCHAR (max)), '0', ''))), '', '0 '),'. ',' ')),' ','. ')