【发布时间】:2017-09-25 02:34:16
【问题描述】:
我想从日期在给定月份内的表格中选择人员。
这是我到目前为止所拥有的,但它不起作用:
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();
【问题讨论】:
-
为什么不
select persons from expulsions where data = date_part'month','2016-11-21');?..为什么起作用?为什么它有常数?为什么连列名称都在常量之间?..你的目标是什么?.. -
那些可怕的反引号在 Postgres 中是无效的。字符串常量必须放在单引号中:
'data'postgresql.org/docs/current/static/… -
也推荐使用
date_trunc()::date(获取月份的第一天),除非你不关心年份。要么那个,要么像to_char(mydatecolumn,'YYYYmm')。 -
@a_horse_with_no_name 参数应该没问题。 "USING mes" 将 "mes" 传递给 "$1"
-
请edit澄清问题。删除无意义的反引号,提供表定义(
CREATE TABLE语句)和您的 Postgres 版本。
标签: postgresql function datetime plpgsql dynamic-sql