我是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
答案 0 :(得分:0)
如果是2012+,您可以选择Format()。
示例强>
try:
numbers = [int(n) for n in input('Space-separated integers, please: ').split()]
except ValueError as e:
print('I needed numbers. You gave me something else.')
<强>返回强>
input
请注意。 Format()有一些很棒的功能,但不知道它是一个高性能。
答案 1 :(得分:0)
以下代码演示了将数据格式化为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)以便于显示。
答案 2 :(得分:0)
如果您没有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;
数字很大,将以***
的形式返回。这比使用RIGHT
或LEFT
剪切字符串的其他方法更好。他们可能会返回一个糟糕的结果......
返回
-***
-500
-001
000
001
500
***
答案 3 :(得分:0)
在 DB2 中,这可以获取包括符号在内的 15 位数字:
CASE WHEN MYNUMBER < 0 THEN '-' || LPAD(MYNUMBER , 14, 0)
ELSE LPAD(MYNUMBER , 15, 0)
END