【问题标题】:LPAD & RPAD with parameter带参数的 LPAD 和 RPAD
【发布时间】:2018-02-22 11:43:24
【问题描述】:

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

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

语法基本上是 lpad 或 rpad (string, length, pad_string)。就在上面。

复杂的是“长度”,应该是整数,我必须为控制表中某个字段的变量值做。

这个值是可变的,所以我做了一个函数来返回它的值。

我尝试过这样做:

        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 ...

【问题讨论】:

    标签: postgresql postgresql-9.4 rails-postgresql


    【解决方案1】:

    添加类型转换:

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

    【讨论】:

    • 谢谢 Laurenz Albe,我明白了我的错误。定义为函数返回一个数值,当它必须是整数时。将返回值从数字更改为整数,它对我来说没有问题。
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2022-01-22
    • 2013-08-11
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多