SQL Server浮点数据类型转换为平面文件

问题描述 投票:0回答:2

我有一个动态的SQL查询,创建一个SP。然后,SSIS包将数据直接从这些SP加载到Flat Files。对于表中的浮点值,我们将数据从SP加载到平面文件。我们希望浮点值在平面文件中是精确的。我们不希望任何额外的零,不正确的值。我们使用以下sql转换函数以保持值不变但对于诸如8023545654之类的值,此转换函数修剪值。 enter image description here适用于SQL Server 2008

SQL Server 2008

sql sql-server tsql ssis-2008
2个回答
0
投票

试试这个?

DECLARE @tempforAnshul TABLE (id INT, new FLOAT);
INSERT INTO @tempforAnshul SELECT 1, 45.67;
INSERT INTO @tempforAnshul SELECT 2, 45.675;
INSERT INTO @tempforAnshul SELECT 3, 123.45;
INSERT INTO @tempforAnshul SELECT 4, 345.34;
INSERT INTO @tempforAnshul SELECT 5, 8023545654;
SELECT id, FORMAT(new, 'G') FROM @tempforAnshul;

给您以下结果:

id  (No column name)
1   45.67
2   45.675
3   123.45
4   345.34
5   8023545654

值得注意的是,FORMAT返回NULL或NVARCHAR,这似乎是你想要的?但是,你无法控制NVARCHAR的长度,所以你可能需要在这里小心一点?

...然后我重新阅读了你的问题,看到你正在使用SQL Server 2008.这是一个痛苦,因为FORMAT直到2012年才出现,但这个hack会起作用:

WITH x AS (
    SELECT id, REVERSE(CONVERT(NVARCHAR(50), CONVERT(DECIMAL(30,8), new))) AS val FROM @tempforAnshul),
y AS (
    SELECT id, REVERSE(SUBSTRING(val, PATINDEX('%[^0]%', val), 100)) AS val FROM x)
SELECT
    id,
    CASE 
        WHEN RIGHT(val, 1) = '.' THEN LEFT(val, LEN(val)-1)
        ELSE val
    END AS val
FROM
    y;

0
投票

转换值未被截断的浮点值的最佳方法可能是

Select CONVERT(DECIMAL(18,7),columnname),128)[columnname] From TableName 

它帮助我在将它们插入文本文件时保留大部分浮点值。

欢迎提出建议

© www.soinside.com 2019 - 2024. All rights reserved.