如何将负值放入括号中

时间:2010-10-14 11:44:55

标签: sql sql-server tsql

我想在-2000到(2000)

之类的括号中放置负值

因为我做了一个将-1361236.75886298转换为(1.36124e + 006)

我为此做的功能是:

ALTER function [dbo].[IsNegative](
@Number NVARCHAR (500)
)
Returns nvarchar (200)
as
begin 
Declare @Number2 FLOAT
set @Number2=Cast (@Number as float)
Declare @result nvarchar (200)
if ( @Number2  <=0.0)
begin
Set @result='('+Substring (@Number,2,len(@Number))+')'
end
else        
begin
Set @result = @Number 
end
return @result
end

我想要准确的答复 提前谢谢

3 个答案:

答案 0 :(得分:3)

此功能的建议用法是什么?

这种类型的格式化最好留给表示层(假设有一个表示层)

以下函数可能适合格式化要连接成更长字符串的各个独立值。它可能不适合格式化多个值,因为您希望这些值全部以小数点对齐。为此,您可以调查str函数。

CREATE FUNCTION [dbo].[IsNegative](
@Number DECIMAL(38,16)
)
RETURNS VARCHAR (50)
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN 
DECLARE @result VARCHAR (50)

/*Trim trailing zeroes and decimal point*/
SET @result = REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(@Number,'0', ' ')),' ', '0'),'.', ' ')),' ', '.')

IF @Number < 0
    SET @result = '(' + SUBSTRING(@result,2,LEN(@result)) + ')'

RETURN @result
END


GO

WITH T AS
(
SELECT -1361236.75886298 AS N UNION ALL
SELECT -2000 UNION ALL
SELECT 2000
)

SELECT 
     [dbo].[IsNegative](N)
FROM T

返回

(1361236.75886298)
(2000)
2000

这就是你需要的吗?

答案 1 :(得分:2)

对于SQL Server 2012及更高版本,另一种方法是使用FORMAT函数将括号括起来。

一个小的限制是您需要指定最大小数位数。

WITH T AS
(
SELECT -1361236.75886298 AS N UNION ALL
SELECT -2000 UNION ALL
SELECT 2000 
)

SELECT 
     FORMAT ( N, '#,###.##########;(#,###.##########)') 
FROM T

结果:

(1,361,236.75886298)
(2,000)
2,000

答案 2 :(得分:1)

解决方案也可以通过“案例”实现。例如,假设我有一个表a,列abc具有值:

select abc, case when abc>=0, abc else '(' + Convert(varchar,abs(abc),106) + ')' End From a