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 -----------------------------------------^
我正在尝试为这样的表达式使用变量
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 -----------------------------------------^