SQL格式数字带有方括号

时间:2019-01-17 10:17:48

标签: sql sql-server sql-server-2005

我需要格式化一个负数以在SQL中带有方括号,并以正数作为标准出现。

例如,当我需要一个正值显示为399和一个负值显示为-399时,它当前显示为399,为-399。

这是用于SQL Server 2005。

我编写了以下内容以进行测试。

SELECT num, CASE
    WHEN num < 0 THEN '(' + CAST(-num AS VARCHAR(11)) + ')'
    ELSE CAST(num AS VARCHAR(11))
END AS frmtd
FROM (
    SELECT    0 AS num UNION ALL
    SELECT  945        UNION ALL
    SELECT -945
) tests

但是,正如您所看到的,我的列名只是num,但是在我要实现的查询中,正在发生计算。

这是一行:

SUM (PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000  'Var Vs LY £k'

有人可以帮助我确定如何将其工作。我知道应该在表示层完成此操作,但是我希望它可以在SQL之外完成。

2 个答案:

答案 0 :(得分:1)

使标量函数每次都使用

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE FUNCTION FormatBracket(@Value as money)
RETURNS varchar(30)
AS
BEGIN
    DECLARE @RETVAL AS varchar(30);
    select
         @retval = case when @VALUE < 0 THEN 
                                    '(' + cast(ABS(@value) as varchar(28)) + ')'
                      else
                                    cast(@value as varchar(28))
                    END;

    RETURN @RETVAL;     

END
GO

然后

SELECT num, dbo.FormatBracket(num)
AS frmtd
FROM (
SELECT    0 AS num UNION ALL
SELECT  945        UNION ALL
SELECT -945
) tests

我使用了MONEY变量类型,当然可以是任何数字类型,我不确定Money是否在2005年

答案 1 :(得分:0)

这行不通吗?

SELECT num,
       (CASE WHEN (SUM(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000)  < 0
             THEN '(' + CAST(-(SUM(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000) AS VARCHAR(11)) + ')'
              ELSE CAST((SUM(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / 1000) AS VARCHAR(11))
        END) AS frmtd