LPAD&带参数的RPAD

时间:2018-02-22 11:43:25

标签: postgresql postgresql-9.4 rails-postgresql

我有一个问题,我在postgres中有一个函数,用于生成将用于生成更复杂报告的标题。

一切都很好。对于标题的结构,我根据字段本身向左或向右留空格,这是在lpad和rpad上实现的。

语法基本上是lpad或rpad(string,length,pad_string)。好吧。

复杂的是" length",它应该是一个整数,我必须对控制表中字段的变量值这样做。

值是可变的,所以我创建了一个函数,让我回到它的值。

我试过这样做:

        SELECT c_transac||
           lpad(c_tr_count,(SELECT crd.get_size_field('CRD',c_transac,'TRANSACTION-SEQUENCE')),' ')||
           lpad(c_rc_count,8,' ')||
           rpad(to_char(c_ctac_correlativo,'9999'),10,' ')||
           rpad(ti.type_right,3,' ')||
           lpad(ct.peri_codigo,8,' ')||
           lpad(ct.peri_codigo,8,' ')||
           lpad(v_pcod_scd_dest,11,' ')||
           rpad(v_sigla_dest,45,' ')||
           lpad('0',8,' ')||
           lpad(to_char(c_decimal,'9'),1,' ')||
           lpad(to_char(c_percentage,'9'),1,' ')||
           rpad(c_version_crd,5,' ')||
           rpad(c_currency,3,' '),
           ti.type_right
    INTO v_linea_sdn, c_type_right
    FROM crd.tidav ti, public.ctact ct
    WHERE to_number(ti.tida_codigo, '9') = c_tida_codigo
    AND ct.ctac_correlativo = c_ctac_correlativo;

我调用的函数返回一个数值,它给出了以下错误:

ERROR: there is no lpad function (character varying, numeric, unknown)
LINE 2: lpad (c_tr_count, (SELECT crd.get_size_field ('CRD', c_tra ...

1 个答案:

答案 0 :(得分:0)

添加类型转换:

lpad(
   c_tr_count,
   CAST(
      crd.get_size_field('CRD',c_transac,'TRANSACTION-SEQUENCE')
      AS integer
   ),
   ' '
)