我想在-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
我想要准确的答复 提前谢谢
答案 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