将时间戳参数传递给Postgresql 10.6中的函数

时间:2019-06-26 14:29:12

标签: postgresql function timestamp

我正在构建此功能:

CREATE OR REPLACE FUNCTION qradar21(cliente_in VARCHAR(50), fecha_inicio timestamp, fecha_fin timestamp) RETURNS TABLE(empresa varchar, fecha timestamp, fuente text, total float) AS $$
    BEGIN
        RETURN QUERY
            SELECT qradar_eventos_detalle.empresa, qradar_eventos_detalle.fecha, eventos->>'fuente' AS fuente, sum((eventos->>'total')::float) AS total FROM public.qradar_eventos_detalle
            WHERE qradar_eventos_detalle.empresa = 'cliente_in'
            AND qradar_eventos_detalle.fecha BETWEEN 'fecha_inicio' AND 'fecha_fin'
            GROUP BY qradar_eventos_detalle.empresa, qradar_eventos_detalle.fecha, qradar_eventos_detalle.eventos
            ORDER BY total DESC;
    END;
$$ LANGUAGE plpgsql

并调用:

SELECT * FROM qradar21('BancoXXX', '2018-12-29 12:00:00', '2019-03-03 07:00:00');

获取此消息:

错误:时间戳类型的无效输入语法:«fecha_inicio» 第3行:AND qradar_eventos_detalle.fecha在“ fecha_inicio” A ...之间...

如果我将函数更改为直接使用日期(AND qradar_eventos_detalle.fecha BETWEEN'2018-12-29 12:00:00'和'2018-12-30 07:00:00'),则效果很好。

我不知道我在做什么错...有谁知道如何将这种“无时区的时间戳”格式传递给函数? 预先谢谢你

1 个答案:

答案 0 :(得分:0)

您的函数使用字符串文字,而不是引用参数。

您需要删除参数名称周围的单引号:

test_spam::test_urls[e_1] PASSED
test_spam::test_urls[e_2] PASSED
...
test_spam::test_urls[e_n] PASSED

调用它时,最好使用正确的时间戳文字:

WHERE qradar_eventos_detalle.empresa = cliente_in --<< no quotes here!
AND qradar_eventos_detalle.fecha BETWEEN fecha_inicio AND fecha_fin
                                         ^
                                        or here