我有一个创建SP的动态sql查询。然后,SSIS包将数据直接从这些SP加载到Flat Files。对于表中的浮点值,我们将数据从SP加载到平面文件。我们希望浮点值在平面文件中是精确的。我们不想要任何额外的零,不正确的值。我们使用以下sql转换函数以保持值不变但对于诸如8023545654之类的值,此转换函数修剪值。 用于SQL Server 2008
SQL Server 2008
答案 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
这有助于我将大多数浮点值保存在文本文件中时的保存方式。
欢迎提出建议