我正在构建这个功能:
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行:和qradar_eventos_detalle.fecha之间的'fecha_inicio‘A。
如果我将函数更改为直接使用日期(“2018-12-29 12:00”和“2018-12-30 07:00:00”之间的qradar_eventos_detalle.fecha ),那么效果很好。
我不知道我做错了什么..。有人知道如何将这种“没有时区的时间戳”格式传递给函数吗?提前谢谢你
发布于 2019-06-26 14:31:09
您的函数使用字符串文本,而不是引用参数。
您需要删除参数名称周围的单引号:
WHERE qradar_eventos_detalle.empresa = cliente_in --<< no quotes here!
AND qradar_eventos_detalle.fecha BETWEEN fecha_inicio AND fecha_fin
^
or here当您调用它时,最好使用正确的时间戳文字:
SELECT *
FROM qradar21('BancoXXX', timestamp '2018-12-29 12:00:00', timestamp '2019-03-03 07:00:00');https://stackoverflow.com/questions/56775190
复制相似问题