【发布时间】:2017-05-21 09:25:47
【问题描述】:
我在创建一个需要 2 个输入(startDate 和 endDate)的函数时遇到问题,它将返回这些日期之间的所有结果。我认为语法是我的主要问题。我目前使用的日期仅用于测试目的。我该怎么做?
CREATE OR REPLACE FUNCTION report_new(stDt date, endDt date)
RETURNS TABLE("Form" integer, "CBID" character varying(4000),"Drug Duration" character varying(4000),"DateNotify" character varying(4000),"Dose" character varying(4000),
"Agent" character varying(4000),"Onset" character varying(4000),"Expectedness" character varying(4000),
"Grade" character varying(4000),"Investigator's opinion" character varying(4000),"Protocol No." character varying(4000),
"Medical Monitor's Opinion" character varying(4000),"Status" character varying(4000),"Offset" character varying(4000),
"Reported Term" character varying(4000),"Why Serious" character varying(4000),"Study No." character varying(4000),"Subject No." character varying(4000))
AS
$BODY$
SELECT * FROM CROSSTAB(
'SELECT event_crf_id, i.description, id.value FROM item i, item_data id
WHERE i.item_id=id.item_id
AND id.item_id IN (select item_id from item_data where event_crf_id IN (select event_crf_id from event_crf where crf_version_id=88)
AND name SIMILAR TO ''(SAE_SPONSSTDYNO|SAE_STUDYSUBJNO|SAE_IRBPROTNO|SAE_DRGUNINV|SAE_DOSEEVENT|SAE_GRADE|SAE_REPTERM|SAE_EVENTSTART|SAE_EXPOCCSA|SAE_OUTCOME_DAT|SAE_OUTCOME_STATUS|SAE_MM_OPN_REL|SAE_MONOPSER|SAE_EXP|SAE_RESULTDEATH|SAE_CBID|SAE_DTLTRSNT)'')
AND ''id.date_created between '''||to_char(stDt, 'YYYY-MM-DD') || ''' AND '''||to_char(endDt, 'YYYY-MM-DD')'''ORDER BY 1,2')
AS ct ("Form" integer, "CBID" character varying(4000),"Drug Duration" character varying(4000),"DateNotify" character varying(4000),"Dose" character varying(4000),
"Agent" character varying(4000),"Onset" character varying(4000),"Expectedness" character varying(4000),
"Grade" character varying(4000),"Investigator's opinion" character varying(4000),"Protocol No." character varying(4000),
"Medical Monitor's Opinion" character varying(4000),"Status" character varying(4000),"Offset" character varying(4000),
"Reported Term" character varying(4000),"Why Serious" character varying(4000),"Study No." character varying(4000),"Subject No." character varying(4000))
$BODY$
LANGUAGE 'sql' VOLATILE;
【问题讨论】:
-
我有点失落。 . .第一段中的问题与帖子中的查询有什么关系?
-
Google for postgresql 函数返回 setof 或 table - 你会发现大量的例子
-
我认为您正在寻找
format()function(如format('SELECT ... WHERE id.date_created between %L and %L', param1, param2)) -
我之前发布了我想在函数中使用的查询。我尝试创建函数,但它给了我错误。
-
@pozs 整洁!
format()9.1 中的新功能,作为quote_nullable()、quote_ident()的替代品,我应该花更多时间阅读更新日志,
标签: sql postgresql function syntax