Sql server 如何将十进制值转换为varchar值

Sql server 如何将十进制值转换为varchar值,sql-server,Sql Server,我有一个包含十进制(15,7)的值作为数据类型。小数点后包含5位数字。我的值是:123.1071570。当我尝试将值转换为“varchar”时,在输出中我得到123.107。将值转换为varchar后,我希望结果为123.107157 我所尝试的: DECLARE @test1 decimal(15,7), @test2 nvarchar(10) SELECT @test1 = 123.1071570 --Case 1 : SELECT cast(@test1 as floa

我有一个包含十进制(15,7)的值作为数据类型。小数点后包含5位数字。我的值是:123.1071570。当我尝试将值转换为“varchar”时,在输出中我得到123.107。将值转换为varchar后,我希望结果为123.107157

我所尝试的:

DECLARE @test1 decimal(15,7),
        @test2 nvarchar(10)

SELECT @test1 = 123.1071570

--Case 1 :
SELECT cast(@test1 as float) AS value1  
-- output : 123.107157  -- Value which I got after using cast()

-- I want to concate the value with string, so I need to convert it to varchar,
SELECT 'value is: '+convert(varchar,cast(@test1 as float)) AS value2     
-- output 
-- value is: 123.107  ---- Value which I got after converting it to varchar

-- Case 2 : 
SELECT convert(DOUBLE PRECISION, @test1)  AS value1  
-- output : 123.107157  -- Value which I got after using DOUBLE


SELECT 'value is: '+convert(varchar,convert(DOUBLE PRECISION, @test1)) AS value2     
-- output 
-- value is: 123.107  ---- Value which I got after converting it to varchar
我希望输出为:“值为:123.107157”

我想从我的值中删除尾随的零。 我的值可以是任何值,但在使用Double的Cast()之后,当我将其转换为varchar时,我希望得到与Cast或Double相同的结果。

如下所述:

正如您在评论中提到的,如果您没有固定长度,可以使用此选项:

DECLARE @myval decimal (15, 7);
SET @myval = 123.1200000 ;
SELECT CASt(CAST(CAST(@myval AS DECIMAL(15, 7)) AS FLOAT) AS NVARCHAR(255))

你能试试这种方法吗

DECLARE @myval decimal (15, 7);
SET @myval = 123.1071570;
SELECT CAST(CAST(@myval AS DECIMAL(15, 7)) AS FLOAT)

结果:
123.107157

只需将值转换为nvarchar

使用下面的查询

DECLARE @test1 decimal(15,7),
    @test2 nvarchar(10)

SET @test1 = 123.1071570

SELECT cast(@test1 as nvarchar(20)) AS value1  
棘手的XML(从SQL Server 2008开始):)

输出:

Value is: 123.107157
Value is: 123.12
Value is: 123

123.107157
如何变成
123.10705
——这不是明显的四舍五入!很抱歉问一下,这是数据库中应该发生的事情吗?这听起来像是属于业务层的东西,在业务层中更容易做到。首先,你,其次,如果你必须在SQL server中完成,而不是在表示层,并且你使用的是
SQL server 2012+
,那么你可以使用通用的数字类型格式,例如
SELECT格式(@test1,'g15'))
@GarethD谢谢你的回答。它在sql server 2012+中工作。但是我希望从SQLSerer5+得到相同的结果。对于这个问题有什么解决方案吗?对于旧版本,可以使用标量函数来完成,但我要强调的是,这不是SQL Server的工作。不要试图把一个方形的钉子塞进一个圆形的洞里,承认这个洞是圆形的,然后找一个新的钉子。也就是说,仅仅这一个是不正确的。我在我的问题中提到,我想删除尾随的零。意味着如果我的值是12.000000,那么输出将是12,如果我的值是123.1200000,那么输出将是123.12,就像如果我的值是123.1071570,那么它应该是123.107157。因此,将其更改为最后一行中的小数点(15,6)。但是如果你已经修正了Lengtur的答案不正确,当我在@Arulkumar的帮助下用123.1071570代替123.1200000时,我编辑了我的答案,这是你的需要
DECLARE @x xml

DECLARE @t TABLE (
    digit decimal(15,7)
)

INSERT INTO @t VALUES
(123.1071570),
(123.1200000),
(123.0000000)

SELECT @x = (
    SELECT digit as d
    FROM @t
    FOR XML PATH('')
)

SELECT 'Value is: '+CAST(t.c.query('. cast as xs:decimal?') as nvarchar(max))
FROM @x.nodes('/d') as t(c)
Value is: 123.107157
Value is: 123.12
Value is: 123