根据另一列SQL设置小数位数的格式

时间:2018-10-09 07:03:25

标签: c# sql sql-server wpf tsql

总体问题:

我的SQL Server中有一个表,其中包含3列(ID,值,十进制)。 因此,理论上我想做的是SELECT列Value,并且应将其格式化为同一行中指定的小数位数。

我尝试过的事情:

SELECT CONVERT(Decimal(18,s.Decimal), s.Value ) FROM Table s

以及使用CASTFORMAT的类似查询

我想要的:

表:

ID  Value        Decimal
1   500.754254   2

当我运行查询时,它必须返回Value为'500.75'

其他信息: 我将结果显示在WPF(C#)数据网格中,如果在那里格式化起来更容易,我不在乎。我只是不知道该怎么办。

2 个答案:

答案 0 :(得分:1)

我们可以在此处尝试使用FORMAT

SELECT FORMAT(123.123456, '##.' + LEFT('##########', Decimal))
FROM yourTable;

Demo

上面的技巧是掩码的小数部分的宽度由Decimal列的值确定。如果您期望需要超过10个小数位,则只需扩展###字符串文字即可。

另一个选项可能正在使用ROUND

SELECT ROUND(Value, Decimal)
FROM yourTable;

但是,这种格式设置通常最好在表示层中处理。因此,我可能会寻求WPF / C#的解决方案。

答案 1 :(得分:1)

这是一个表示问题,因此,应由表示层处理。 C#有非常简单的方法来格式化输出,但是正如您在问题中所写的那样,您想知道如何在T-SQL中进行操作-因此,这里是一个使用castcharindex的选项和left

首先,创建并填充示例表(在您将来的问题中为我们保存此步骤):

DECLARE @T AS TABLE
(
    id int identity(1,1),
    [Value] decimal (18,10),
    [Decimal] int
)

INSERT INTO @T ([Value], [Decimal]) VALUES
(500.754254, 2),
(50.75636, 3),
(12345.7254, 1),
(1.424, 4)

查询:

SELECT  ID, 
        Value, 
        [Decimal],
        LEFT(CAST([Value] As varchar(18)), CHARINDEX('.', CAST([Value] As varchar(18))) + [Decimal]) As [Left] 
FROM @T

结果:

ID  Value               Decimal Left
1   500,7542540000      2       500.75
2   50,7563600000       3       50.756
3   12345,7254000000    1       12345.7
4   1,4240000000        4       1.4240