加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 使用OpenRowSet导入.CSV文件时,将科学符号转换为f

发布时间:2020-12-12 08:30:03 所属栏目:MsSql教程 来源:网络整理
导读:我使用openrowset将csv文件导入SQL Server. csv文件中的列之一包含科学符号(1.08E 05)中的数字,表中正在插入的列 默认情况下,它将值设置为1,忽略.08E 05. 我已经尝试使用cast()和convert()来直接在查询执行时转换值,以及将表中的数据类型设置为字符串并将其导
我使用openrowset将csv文件导入SQL Server. csv文件中的列之一包含科学符号(1.08E 05)中的数字,表中正在插入的列

默认情况下,它将值设置为1,忽略.08E 05.

我已经尝试使用cast()和convert()来直接在查询执行时转换值,以及将表中的数据类型设置为字符串并将其导入.所有这些方法都具有相同的行为,忽略.08E 05.

有没有办法将值导入为108000而不是没有.08E 05的1,而不必更改csv文件本身?

将数据类型设置为varchar并在csv文件中读取似乎与以下代码具有相同的效果:

CREATE TABLE #dataTemp (StartDate datetime,Value varchar(12))

SET @insertDataQuery = 'SELECT Date,CSVValue from OpenRowset(''MSDASQL'',''Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=' 
SET @insertDataQuery = @insertDataQuery + 'C:Data;'',''SELECT * FROM '+ '11091800.csv' + ''')'

INSERT INTO #dataTemp EXEC(@insertDataQuery)

SELECT * FROM #dataTemp

不是CSV文件中的所有值都不具有科学符号和没有它的值,例如. 81000遇到没有问题.

解决方法

对于BULK INSERT方法,我经常发现,首先将数据移动到所有varchars的表中更简单,然后摆脱诸如引用的分隔符和修复格式的无关的事情.我记得有一个时间摆脱科学记谱法,你可以玩varchar表,直到你正确.我记得尝试各种精度/比例组合,直到我终于找到一个兼容的.我想对我来说是FLOAT然后DECIMAL(24,12)…

SELECT CONVERT(DECIMAL(24,12),CONVERT(FLOAT,’1.08E 05′));

编辑添加了我做的尝试重现和/或展示一个较不复杂的方式.

我创建了一个非常简单的CSV文件:

StartDate,Value
20110808,81000
20110808,1.08E+05

然后我运行以下代码(由于某种原因,我无法让MSDASQL在我的机器上运行以挽救我的生命):

CREATE TABLE #dataTemp(StartDate DATETIME,Value VARCHAR(32));

BULK INSERT #dataTemp FROM 'C:datawhatever.csv' 
    WITH (ROWTERMINATOR='n',FIELDTERMINATOR=',',FIRSTROW = 2);

SELECT * FROM #dataTemp
GO
SELECT StartDate,CONVERT(INT,Value)) FROM #dataTemp;
GO
DROP TABLE #dataTemp;

结果:

StartDate               Value
----------------------- --------
2011-08-08 00:00:00.000 81000
2011-08-08 00:00:00.000 1.08E+05

StartDate               (No column name)
----------------------- ----------------
2011-08-08 00:00:00.000 81000
2011-08-08 00:00:00.000 108000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读