我想从表格中选择日期在给定月份内的人 这是我到目前为止所做的,但它不起作用:
CREATE OR REPLACE FUNCTION u7()
RETURNS character varying AS
$BODY$
DECLARE
data varchar=`data`;
mes varchar=`2016-11-21`;
incidencia varchar=`expulsions`;
valor varchar;
BEGIN
EXECUTE `SELECT `
||quote_ident(data)
||`FROM `
||quote_ident(incidencia)
||` WHERE data IN(select date_part(`month`, TIMESTAMP $1))`
INTO valor USING mes;
return valor;
END;
$BODY$
LANGUAGE plpgsql;
select * FROM u7();
答案 0 :(得分:0)
您尝试执行的操作的清晰语法可能如下所示:
CREATE OR REPLACE FUNCTION u7()
RETURNS TABLE (valor text) AS
$func$
DECLARE
data text := 'data'; -- the first 3 would typically be function parameters
incidencia text := 'expulsions';
mes timestamp = '2016-11-21';
mes0 timestamp := date_trunc('month', mes);
mes1 timestamp := (mes0 + interval '1 month');
BEGIN
RETURN QUERY EXECUTE format(
'SELECT %I
FROM %I
WHERE datetime_column_name >= $1
AND datetime_column_name < $2'
, data, incidencia)
USING mes0, mes1;
END
$func$ LANGUAGE plpgsql;
SELECT * FROM u7();
显然,data
不能同时是文本列和时间戳或日期列。我使用datetime_column_name
作为时间戳列 - 假设它的数据类型为timestamp
。
除了各种语法错误之外,不要将构造与date_part()
一起使用。这样你就不得不处理表格的每一行而不能使用datetime_column_name
上的索引 - 这是我建议的替代方案。
有关说明,请参阅相关答案: