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?
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.
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 ...
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.
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.
SELECT CAST(CAST(1234567890.1234 AS FLOAT) AS NVARCHAR(100))
sortie
1.23457e+009
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.