1
我有一个关于SQL Server的问题:如何将科学记数值转换为整数值?如何使用SQL Server处理列中的混合数据类型值
我们有一些账单号码被转换为科学记数法。这意味着它们的帐单号码格式不正确,应该转换回正常的十进制或数字格式。
我遇到困难转换只有那些具有科学记数法的值。
该列为nvarchar(255)
数据类型,但这些值需要操纵回numeric
或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')
我已经试过这样的,但如果我运行此查询:
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')
那么这样的结果:
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
如果我运行此查询:
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
然后我收到一个错误:
Msg 8115, Level 16, State 6, Line 2
Arithmetic overflow error converting float to data type numeric.
我需要获取所有记录相关的输出信息。你能告诉我如何在SQL Server中执行此操作吗?