如何在PostgreSQL中将变量连接到其他变量?

时间:2019-08-07 04:35:08

标签: sql postgresql

在使用.(点)的php连接变量中,例如$a = "tes", $b="b",如果
我连接$a.$b,它变成“ tesb”。我想要这个,但是在postgres

我尝试使用点号和+,但是错误

我的代码

CREATE OR REPLACE FUNCTION make_ctx_contoh (rl varchar, dat varchar)
RETURNS numeric AS $total$
declare
date_before date;
dan text;
os_l numeric;
BEGIN
date_before = (DATE_TRUNC('month', NOW()) 
    + '0 MONTH'::INTERVAL 
    - '1 DAY'::INTERVAL)::DATE;
if rl = 'nasional' THEN
dan = '';
ELSEIF rl = 'kanwil' THEN
dan = 'AND LOWER(a."KANWIL") = knw';
ELSEIF rl = 'kc' THEN
dan = 'AND LOWER(a."KC") = kac';
END IF;
SELECT
    SUM("a"."OUTSTANDING") into os_l
    FROM
    "public".tbl_nominatif_hasil AS "a"
    WHERE
    "a"."BUSS_DATE" = date_before AND
    "a"."COLLDET" = '1 ' + dan; RETURN os_l;
END; $total$ LANGUAGE plpgsql;

当我运行时,选择显示如下错误的make_ctx_contoh('kanwil','2');

  

错误:运算符不存在:未知+文字第6行:
  “ a”。“ COLLDET” ='1'+丹

1 个答案:

答案 0 :(得分:0)

根据我的代码理解,您希望根据某些条件将条件添加到where子句中。

因此,将您的选择查询转换为AND OR逻辑。

SELECT
    SUM("a"."OUTSTANDING") into os_l
       FROM "public".tbl_nominatif_hasil AS "a"
    WHERE "a"."BUSS_DATE" = date_before AND
    "a"."COLLDET" = 1 
    AND ( rl = 'nasional' OR 
        ( rl = 'kanwil' AND LOWER(a."KANWIL") = knw) OR
        ( rl = 'kc'     AND LOWER(a."KC") = kac')
        )