web-dev-qa-db-fra.com

lancer ou convertir un float en nvarchar?

Je dois sélectionner une colonne de type de données float et l'insérer dans une autre colonne en tant que 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 chiffres (numéro de téléphone). 

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

23
Eugene

Vérifiez STR . Vous avez besoin de quelque chose comme SELECT STR([Column_Name],10,0) ** Ceci est une solution SQL Server, pour les autres serveurs, vérifiez leur documentation.

31
a1ex07

Si vous stockez des numéros de téléphone dans une colonne de type float (ce qui est une mauvaise idée), ils sont probablement tous des entiers et peuvent être convertis en int avant la conversion en 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, la cast(1234567890 as float) la plus interne est utilisée au lieu de sélectionner une valeur dans la colonne appropriée.

Je recommande vraiment que vous ne stockiez pas les numéros de téléphone dans des flotteurs!
Et si le numéro de téléphone commence par un zéro?

select cast(0100884555 as float)
100884555

Oups! Nous venons de stocker un numéro de téléphone incorrect ...

14
Coxy

Ne pas utiliser des floats pour stocker des données en virgule fixe et en précision ..... Cet exemple montre comment convertir correctement un float en NVARCHAR (50), tout en montrant également pourquoi il est déconseillé d'utiliser 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 remarquerez peut-être que la deuxième sortie se termine par «10000» bien que les données que nous avons essayé de stocker dans le tableau se terminent par «00000». C'est parce que le type de données float prend en charge un nombre fixe de chiffres significatifs, qui ne va pas aussi loin.

8
RichardTheKiwi

Float ne convertit pas directement en NVARCHAR. Nous devons d’abord convertir cette valeur en type de données money, puis en NVARCHAR, voir les exemples ci-dessous.

Exemple 1

SELECT CAST(CAST(1234567890.1234  AS FLOAT) AS NVARCHAR(100))

sortie 

1.23457e+009

Exemple2

SELECT CAST(CAST(CAST(1234567890.1234  AS FLOAT) AS MONEY) AS NVARCHAR(100))

sortie 

1234567890.12

Dans Example2, la valeur est convertie en float en NVARCHAR.

0
Pullaiah Mamidala