SQL Server Float数据类型转换为Flat文件

时间:2018-05-22 10:00:42

标签: sql sql-server tsql ssis-2008

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

SQL Server 2008

2 个答案:

答案 0 :(得分: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年之前没有进入,但是这个黑客会起作用:

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;

答案 1 :(得分:0)

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

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

这有助于我将大多数浮点值保存在文本文件中时的保存方式。

欢迎提出建议