繁体   English   中英

PL / PGSQL函数-将TEXT参数传递给date_trunc()

[英]PL/PGSQL function - passing a TEXT argument to date_trunc()

我想创建一个返回历史日期的简单实用程序函数。

这是我写的函数:

CREATE FUNCTION testdate(duration TEXT) RETURNS DATE AS $$
BEGIN
 SELECT * FROM date_trunc('day', NOW() - interval duration);
END
$$ LANGUAGE plpgsql;

当我尝试创建函数时,出现以下错误:

ERROR:  syntax error at or near "duration"
LINE 3:  SELECT * FROM date_trunc('day', NOW() - interval duration);
                                                          ^

当我删除interval关键字时,我可以创建该函数,但是当我尝试如下使用它时:

SELECT * from testdate('1 month');

我收到以下错误消息:

ERROR:  operator does not exist: timestamp with time zone - text
LINE 1: SELECT * FROM date_trunc('day', NOW() - duration)
                                              ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
QUERY:  SELECT * FROM date_trunc('day', NOW() - duration)
CONTEXT:  PL/pgSQL function testdate(text) line 3 at SQL statement

如何正确将参数传递给date_trunc

我假设您尝试执行以下操作:

CREATE or replace FUNCTION testdate(duration interval) RETURNS DATE AS $$
BEGIN
 return (SELECT * FROM date_trunc('day', NOW() - duration));
END
$$ LANGUAGE plpgsql;

用法:

select * from testdate('1 month');
  testdate
------------
 2017-12-23
(1 row)

当然可以:

CREATE or replace FUNCTION testdate(duration text) RETURNS DATE AS $$
BEGIN
 return (SELECT * FROM date_trunc('day', NOW() - duration::interval));
END
$$ LANGUAGE plpgsql;

与文本参数,只是为了回答您的问题,但我想说的是适当的数据类型会更有意义...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM