Sql server 在SQL Server 2008 R2中导出浮动表数据

Sql server 在SQL Server 2008 R2中导出浮动表数据,sql-server,sql-server-2008-r2,export-to-csv,Sql Server,Sql Server 2008 R2,Export To Csv,我正在尝试将包含一些nvarchar(与实际问题无关)和float列(出现问题的地方)的数据库表导出到平面文件中 问题是,当我在SQL Server 2008 R2 x64中使用导入/导出向导将表导出到平面文件时,浮点列会出现一些与舍入/精度相关的“奇怪”行为 例如,如果列中存储的“实际”值是137691869,04,那么在导出的文件中,我得到的是1376918690399999,而不是137691869,04 如何解决该问题以获得导出平面文件中的“精确”值 谢谢 导出以截断时应使用round(

我正在尝试将包含一些
nvarchar
(与实际问题无关)和
float
列(出现问题的地方)的数据库表导出到平面文件中

问题是,当我在SQL Server 2008 R2 x64中使用导入/导出向导将表导出到平面文件时,浮点列会出现一些与舍入/精度相关的“奇怪”行为

例如,如果列中存储的“实际”值是137691869,04,那么在导出的文件中,我得到的是1376918690399999,而不是137691869,04

如何解决该问题以获得导出平面文件中的“精确”值

谢谢

导出以截断时应使用round():

SELECT ROUND(137691869.03999999, 2) 
将返回值137691869.04

如果您不喜欢服务器版本中的舍入,可以尝试其他相关函数:TRUNC()、NUMERIC()、DECIMAL()

I无论数字如何存储,舍入仅影响输出:

SELECT ROUND(137691869.04, 2) 

将返回值137691869.04

根据定义,您无法从浮点中获取“精确”值。浮点数是近似的日期类型。如果需要精度,应该使用精确的数据类型,如numeric.Yes,但Float(137691869,04)=137691869,04。也就是说,数字137691869,04的浮点表示是相同的数字。问题是,为什么在数据库表中,如果数字存储为137691869,04,那么在导出时,我得到的是1376918690399999,而不是137691869,04?因为浮点数是近似值,在sql server中,这两个“值”是相同的。选择1,其中CAST(137691869.03999999作为浮点)=CAST(137691869.04作为浮点)亲爱的@SeanLange事实上1376918690399999在浮点意义上等于137691869,04,但在平面文件中我需要得到137691869,04。正如我前面所说,如果需要精度,请在导出过程中强制转换列或使用精确的数字。谢谢您的帮助。但是这个数字在数据库表中存储为137691869,04,但是当导出时,我得到的是1376918690399999,而不是137691869,04。