J'ai une question à propos de SQL Server: comment convertir une valeur de notation scientifique en valeurs entières?Comment gérer des valeurs de type de données mixtes dans des colonnes à l'aide de SQL Server
Nous avons des numéros de facture qui ont été convertis en notation scientifique. Cela signifie qu'ils sont dans le mauvais format pour les numéros de facture et doivent être reconvertis au format décimal ou numérique normal.
Je rencontre des difficultés pour convertir uniquement les valeurs qui ont la notation scientifique.
La colonne est du type de données nvarchar(255)
mais ces valeurs doivent être retraitées en numeric
ou decimal
.
CREATE TABLE [dbo].[test]
(
billno [nvarchar](255) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[test] (billno) VALUES (N'9.2091002309e+012')
INSERT INTO [dbo].[test] (billno) VALUES (NULL)
INSERT INTO [dbo].[test] (billno) VALUES (N'4.0206570015e+019')
INSERT INTO [dbo].[test] (billno) VALUES (N'9.2091002204e+013')
INSERT INTO [dbo].[test] (billno) VALUES (N'SEALED05/10/2016')
INSERT INTO [dbo].[test] (billno) VALUES (N'3101123631')
INSERT INTO [dbo].[test] (billno) VALUES (N'57108')
INSERT INTO [dbo].[test] (billno) VALUES (N'9.1108000026e+014')
INSERT INTO [dbo].[test] (billno) VALUES (N'97033429A')
INSERT INTO [dbo].[test] (billno) VALUES (N'5.0846721402e+017')
J'ai essayé comme ça, mais si je lance cette requête:
SELECT
CASE
WHEN billno like '%E+%'
THEN CAST(CAST(CAST(billno AS FLOAT) AS numeric) AS NVARCHAR(255))
ELSE billno
END expectedresult,
billno
FROM
test324.dbo.test
WHERE
billno NOT IN ('4.0206570015e+019', '5.0846721402e+017')
alors ce sont les résultats:
expectedresult |billno
----------------+------------------
9209100230900 |9.2091002309e+012
92091002204000 |9.2091002204e+013
SEALED05/10/2016| SEALED05/10/2016
3101123631 |3101123631
57108 |57108
911080000260000 |9.1108000026e+014
97033429A |97033429A
170668650010000 |1.7066865001e+014
Si je lance cette requête:
SELECT
CASE
WHEN billno LIKE '%E+%'
THEN CAST(CAST(CAST(billno AS FLOAT) AS numeric) AS NVARCHAR(255))
ELSE billno
END test,
billno
FROM
test
Ensuite, je reçois une erreur:
Msg 8115, Level 16, State 6, Line 2
Arithmetic overflow error converting float to data type numeric.
Je dois obtenir toutes les informations de sortie liées aux enregistrements. Pouvez-vous s'il vous plaît me dire comment faire cela dans SQL Server?