我需要格式化一个负数以在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之外完成。
答案 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