excel导入后,将浮点数据从表复制到另一个varchar

时间:2014-01-05 12:49:20

标签: sql sql-server

您好我已经通过Import and Export wizard将数据从Excel导入到我的SQL数据库2008.导入时,某些列被检测为nvarchar,其中一些列为float。我成功导入了所有数据。

现在我想将这些数据复制到另一个表中,以便查询:

INSERT INTO dbo.klient
  (name, surname,rodcis,nopass,street,zip,city,appendix,tel,fax,titul,akce,rocnik)
SELECT [nameorig], [surnameorig],[rodcisorig],[nopassorig],[adresa],[zip],[city],[apporig],[telhomeorig],[telworkorig],titul,'000000-00',2014
  FROM dbo.UCAST3$

E.g。列rodcisorig包含以下值:

7102112688

500722142

515524172

当我尝试将它们复制到float列时检测为varchar的那些列我从上面提到的单元格中得到这样的值:

5.25317e+009

6.15131e+009

有人会帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

将这些列类型从float更改为decimal。那你就不会有科学记数法问题了。十进制以您希望的方式转换为varchar。

如果您无法将列从float更改为decimal,请执行以下操作:

select cast(cast(YourValue as decimal) as varchar)

这会暂时将您的浮动转换为十进制,然后再将其转换为varchar,避免问题。

答案 1 :(得分:1)

测试数据

DECLARE @t TABLE (VALUE FLOAT)
INSERT INTO @t VALUES (7102112688468486),(58468484600722142),(5684684615524172)

SELECT * FROM @t

╔══════════════════════╗
║        VALUE         ║
╠══════════════════════╣
║ 7.10211268846849E+15 ║
║ 5.84684846007221E+16 ║
║ 5.68468461552417E+15 ║
╚══════════════════════╝

<强>查询

SELECT CAST(VALUE AS NUMERIC(38,2)) Vals
FROM @t

最终结果

╔══════════════════════╗
║         Vals         ║
╠══════════════════════╣
║ 7102112688468486.00  ║
║ 58468484600722144.00 ║
║ 5684684615524172.00  ║
╚══════════════════════╝

转换为Varhcar

SELECT CAST(CAST(VALUE AS NUMERIC(38,0)) AS VARCHAR(1000)) Vals
FROM @t

╔═══════════════════╗
║       Vals        ║
╠═══════════════════╣
║  7102112688468486 ║
║ 58468484600722144 ║
║  5684684615524172 ║
╚═══════════════════╝