PostgreSQL - 在引号内使用变量

PostgreSQL - using variable inside quotes

我正在尝试为这样的表达式使用变量

NOW() - INTERVAL '5 days'

但是出现错误:

CREATE OR REPLACE FUNCTION some.archive() RETURNS VOID AS
$$
DECLARE
    p_archive_depth CONSTANT VARCHAR := '5 days';
BEGIN

    IF (date(p_table_date) < date(NOW() - INTERVAL p_archive_depth))
    THEN
        RAISE INFO '%', p_table_name;
    END IF;

END;
$$ LANGUAGE plpgsql;

也试过没有成功:

'' || p_archive_depth || ''
'' p_archive_depth ''

您需要定义数据类型为interval

的变量
DECLARE
    p_archive_depth CONSTANT interval := interval '5 days';
BEGIN 
   IF date(p_table_date) < (now() - p_archive_depth)::date

当然是正确的,但我想提供一种替代方法来将其四舍五入,以防您动态获取字符串值(例如,查询它,将其作为来自用户的参数等)。您可以获取 '5 DAYS' 的字符串值并使用 :: 运算符将其显式转换为 interval

IF (date(p_table_date) < date(NOW() - p_archive_depth::INTERVAL))
    -- Here -----------------------------------------^