2010-10-14 2 views
2

Je veux placer une valeur négative dans le support comme -2000 à (2000)Comment passer une valeur négative dans les supports

pour que i fait une conversion qui est à -1361236,75886298 (1.36124e + 006)

la fonction que je l'ai fait pour cela est:

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 

je veux answere précise Merci à l'avance

+2

Alors, quelle est exactement la question? –

+1

Le seul endroit où j'ai vu des nombres négatifs placés entre parenthèses est dans un système de comptabilité. Si c'est ce que vous construisez, je recommande d'utiliser DECIMAL plutôt que FLOAT, car il fournit une plus grande précision - ce que les comptables aiment. –

Répondre

3

Quelle est l'utilisation proposée de thi s fonction?

Ce type de mise en forme est probablement préférable de laisser à la couche de présentation (en supposant qu'il existe une couche de présentation)

La fonction suivante peut être appropriée pour le formatage des valeurs autonomes individuelles qui doivent être concaténées dans une chaîne plus longue. Il ne serait probablement pas approprié pour le formatage de plusieurs valeurs comme vous voudriez que tous ces éléments soient alignés au point décimal. Pour cela, vous pouvez étudier la fonction 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 

Retours

(1361236.75886298) 
(2000) 
2000 

Est-ce que vous avez besoin?

1

Pour SQL Server 2012 et version ultérieure, une alternative consiste à utiliser la fonction FORMAT pour inclure un nombre négatif entre parenthèses.

Une petite limitation est que vous devrez spécifier un nombre maximum de décimales.

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

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

Résultats:

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

La solution peut également être réalisée avec 'cas'. Par exemple, supposons que j'ai une table avec la colonne abc ayant des valeurs:

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