首页 > 解决方案 > 如何将变量连接到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;

当我运行 selectmake_ctx_contoh('kanwil','2');时显示如下错误:

错误:运算符不存在:未知 + 文本第 6 行:
“a”.“COLLDET” = '1' + dan

标签: sqlpostgresql

解决方案


根据我从您的代码中可以理解的内容,您希望根据某些条件向 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')
        )

推荐阅读