我正在构建此功能:
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'),则效果很好。
我不知道我在做什么错...有谁知道如何将这种“无时区的时间戳”格式传递给函数? 预先谢谢你
答案 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