SQL字符串将我的数字限制为3位数
我有这样一个sql字符串:SQL字符串将我的数字限制为3位数,sql,sql-server,Sql,Sql Server,我有这样一个sql字符串: set @sql1 = 'select @DClose = DClose FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @filePath1 + '' + ';' + '''' + ',''Select * from [Sheet1$]'''+')' 数据来自一个csv文件,我每天都会下载该文件,并附上市场价格。 价格如下所示: Date Price 7
set @sql1 = 'select @DClose = DClose FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @filePath1 + '' + ';' + '''' + ',''Select * from [Sheet1$]'''+')'
数据来自一个csv文件,我每天都会下载该文件,并附上市场价格。
价格如下所示:
Date Price
7/31/2014 123.765625
使用以下命令转换变量时:
set @Price = cast(@DClose as numeric(20,10))
我只得到这个:
123.7660000000
而不是
123.765625
有没有办法得到完整的数字
下面是一个干净的代码:
DECLARE @filePath1 NVARCHAR(MAX)
DECLARE @sql1 NVARCHAR(MAX)
DECLARE @sym1 NVARCHAR(10)
DECLARE @DDate date
DECLARE @DClose NVARCHAR(35)
DECLARE @WhereClause NVARCHAR(MAX)
DECLARE @Price NUMERIC(20,10)
SET @DDate = '08-01-2014'
SET @sym1 = 'excelFileName'
SET @filePath1 = 'somefilepath\'
SET @WhereClause = ' WHERE DDate =' + CHAR(39) + CONVERT(NVARCHAR(25), @DDate, 126) + CHAR(39)
SET @sql1 = 'SELECT @DClose = DClose FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @filePath1 + '' + ';' + '''' + ',''SELECT * FROM [Sheet1$]'''+')'
SET @sql1 = @sql1 + @WhereClause
EXECUTE SP_EXECUTESQL @sql1, N'@DClose NVARCHAR(35) OUTPUT' , @DClose OUTPUT
SET @Price = CAST(@DClose AS NUMERIC(20,10))
Excel认为存储123.765625的单元格/列是什么数据类型?如果不强制转换,@DClose是什么?@DClose声明了什么类型?
@Price
是从@DClose
设置的,所以您需要先跟踪@DClose
,然后担心@Price
。我们看不到如何在问题更正中的代码片段中建立@DClose
。数据每天都存储为.xls文件,而不是csv文件。DClose是一个包含收盘价的列。每个文件都有一个DDate列和一个DClose列。如果我用Excel打开文件,我会看到所有数字