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中執行此操作嗎?