我有一个动态的SQL查询,创建一个SP。然后,SSIS包将数据直接从这些SP加载到Flat Files。对于表中的浮点值,我们将数据从SP加载到平面文件。我们希望浮点值在平面文件中是精确的。我们不希望任何额外的零,不正确的值。我们使用以下sql转换函数以保持值不变但对于诸如8023545654之类的值,此转换函数修剪值。 适用于SQL Server 2008
SQL Server 2008
试试这个?
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;
转换值未被截断的浮点值的最佳方法可能是
Select CONVERT(DECIMAL(18,7),columnname),128)[columnname] From TableName
它帮助我在将它们插入文本文件时保留大部分浮点值。
欢迎提出建议