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

将时间戳参数传递给Postgresql 10.6中的函数,postgresql,function,timestamp,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 qrad

我正在构建这个函数:

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行:和“fecha_inicio”A之间的qradar_eventos_detalle.fecha

如果我将函数更改为直接使用日期(以及“2018-12-29 12:00:00”和“2018-12-30 07:00:00”之间的qradar_eventos_detalle.fecha),效果会很好

我不知道我做错了什么。。。有人知道如何将这种“没有时区的时间戳”格式传递给函数吗?
提前感谢

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

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

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

花了2天时间寻找您在2秒钟内编写的解决方案,但:编写只包含简单查询的函数(如
language sql
)比编写
language plpgsql
效率更高,我肯定会的。我刚刚开始使用postgresql,我非常感谢您的建议
SELECT * 
FROM qradar21('BancoXXX', timestamp '2018-12-29 12:00:00', timestamp '2019-03-03 07:00:00');