在SQR

时间:2018-03-02 14:38:02

标签: oracle report sqr

我正在尝试对齐列值,但它们的长度不同。我不能只使用Print '123' (+1, 9)然后使用Print '123456' (+1, 9),因为它看起来像这样:

123456790123456790123456790123456790123456790123456790 <- Ignore this line
       123
       123456

注意最右边的数字是如何相互对齐的。我希望输出像这样:

123456790123456790123456790123456790123456790123456790 <- Ignore this line
     123
  123456

所以我想停止在某个索引上打印。我如何使用SQR实现这一目标?

我尝试了Print '123' (+1, 9)Print '1234' (+1, 9),但结果错误。

2 个答案:

答案 0 :(得分:1)

我不熟悉SQR,但这里有一个建议:因为SQR支持LPAD功能(见String functions):

  

使用左侧的source_value填充length_value的长度   pad_value并返回结果。

     

语法:dst_var = lpad(source_value,length_value,pad_value)

您可以将它应用于您打印的字符串。例如(再次:请注意我不知道SQR,您可能需要调整它):

Print lpad('123', 6, ' ') (+1, 9)

会使...123(每个点代表一个空格)。

为什么LPAD长度为6个字符?好吧,因为你的另一个字符串('123456')是6个字符长。如有必要,请更改它。

答案 1 :(得分:0)

首先,看起来你想要结束第9列中的值.lPad函数对此不起作用,因为(+1,9)在第9列中说START。另外,你不能把lPad放函数进入print语句。

而是使用第1列中打印的编辑​​参数:

Print 123    (+1,1) edit 999999999
Print 123456 (+1,1) edit 999999999

现在这对于数字很有用,但只要它们包含数字,它也适用于字符串。所以这也有效:

Print '123'    (+1,1) edit 999999999
Print '123456' (+1,1) edit 999999999

我已经在SQR中对这些语句进行了测试并且它们有效,但是,这会产生难看的结果:

Print 'ABC'    (+1,1) edit 999999999
Print 'ABCDEF' (+1,1) edit 999999999

如果必须打印字符串而不是数字,请使用lPad命令格式化变量:

Let $String = lPad($String, 9, ' ')
Print $String (+1,1) ! <--- start at column 1