【问题标题】:Postgres functionPostgres 函数
【发布时间】: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


【解决方案1】:

我通过实际拆分所有内容来使其工作。创建了一个生成整体数据的函数,然后创建了另一个函数,该函数将调用前一个函数并根据日期选择缩小结果范围,依此类推...

稍后我会更新完整的代码,也许它会帮助其他人:)

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 2020-07-17
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2020-10-02
    • 2013-09-23
    • 2012-11-12
    相关资源
    最近更新 更多