SQL Server 设置所选数据中的负值的格式



我是stackoverflow的新手,但我经常搜索它。

我正在从数据创建一个报告,其中我必须格式化负数,例如,

-00000010  (9 characters max)

我得到了这个, 000000-10

这就是我现在正在尝试的,但我遇到了问题。任何帮助将不胜感激。

SELECT 'H' 
+ DG.BLOCK 
+ LEFT(DG.ZIP,5) 
+ RIGHT('000000000' 
+ CAST(CAST(SUM(DG.WP)AS INT) AS VARCHAR(9)),9) 
+ RIGHT('000000000' + CAST(CAST(SUM(DG.WE)AS INT) AS VARCHAR(9)),9)
+ RIGHT('000000000' + CAST(CAST(SUM(DG.EP)AS INT) AS VARCHAR(9)),9) 
+ RIGHT('000000000' + CAST(CAST(SUM(DG.EE)AS INT) AS VARCHAR(9)),9)
+ RIGHT('000000000' + CAST(CAST(COUNT(DGG.CLAIMCONTROL)AS INT) AS VARCHAR(9)),9)
+ RIGHT('000000000' + CAST(CAST(SUM(DGG.INC) AS INT) AS VARCHAR(9)),9)
+ RIGHT('000000000' + CAST(CAST(SUM(DGG.PAID)AS INT) AS VARCHAR(9)),9)
+ RIGHT('000000000' + CAST(CAST(SUM(DGG.ALAE) AS INT) AS VARCHAR(9)),9) 
AS [H Record]
FROM TABLE

如果是 2012+,你可以选择 Format((。

Select replace(format(-1,' 000000000'),'- ','-')

返回

-000000001  If number was negative
000000001  If number was positive

只是提醒一句。 Format(( 有一些很棒的功能,但不知道它是一个高性能的。

下面的代码演示如何将数据的格式设置为 9 位数字加上可选符号或固定的 9 个字符(包括符号(。

-- Sample data.
declare @Samples as Table ( Sample Int );
insert into @Samples ( Sample ) values ( 0 ), ( 1 ), ( -10 ), ( 100 ), ( -1000 );
-- Format the data.
select Sample,
case when Sign( Sample ) = -1 then '-' else '' end +
Right( Replicate( '0', 8 ) + Cast( Abs( Sample ) as VarChar(9) ), 9 ) as FormattedSample9PlusSign,
case when Sign( Sample ) = -1 then
'-' + Right( Replicate( '0', 7 ) + Cast( -Sample as VarChar(8) ), 8 ) else
Right( Replicate( '0', 8 ) + Cast( Sample as VarChar(9) ), 9 ) end as FormattedSample9
from @Samples;

提示: 在 SSMS 中使用查询结果到文本(Ctrl-T( 以便更方便地显示。

如果你没有 v2012+,你可以试试这个:

DECLARE @mockup TABLE(SomeNumber INT);
DECLARE @padWidth INT=3;
INSERT INTO @mockup VALUES(-1000),(-500),(-1),(0),(1),(500),(1000);
SELECT CASE WHEN m.SomeNumber < 0 THEN '-' ELSE ' ' END 
+ REPLACE(STR(ABS(m.SomeNumber),@padWidth),' ','0')
FROM @mockup AS m;

数字,很大,将返回为***。这比其他用RIGHTLEFT切割琴弦的方法要好。他们可能会返回一个不好的结果...

这是返回的

-***
-500
-001
000
001
500
***

在 DB2 中,这适用于获取包含符号的 15 位数字:

CASE WHEN MYNUMBER < 0 THEN '-'  ||   LPAD(MYNUMBER , 14, 0) 
ELSE LPAD(MYNUMBER , 15, 0)                                   
END 

最新更新