【发布时间】:2020-09-03 23:16:55
【问题描述】:
我正在使用 PostgreSQL,并且想创建一个函数并在同一个查询中使用它。我要创建的函数应该和下面的 python 函数一样:
def get_season(dia):
season = (abs(dia.year) % 100) + (1 if dia.strftime('%m-%d') >= '10-01' else 0)
return season
给定一个日期时间,该函数返回其年份的最后两位数,如果日期大于 10 月的第一个,则返回前一位加 1,例如:
输入 = '2017-3-5' -> 输出 = 17
输入 = '2019-11-1' -> 输出 = 20
问题是我不知道在 PostgreSQL 中使用什么函数来执行此操作。
目前,我正在使用以下代码,但抛出错误:
CREATE FUNCTION get_season(dia, datetime) RETURNS integer AS $$
BEGIN
MOD(EXTRACT(year FROM dia), 100) +
CASE WHEN EXTRACT(MONTH FROM dia) >= 10 THEN 1 ELSE 0 END;
END $$
LANGUAGE PLPGSQL;
SELECT date_column, get_season(date_column)
FROM my_table
错误抛出是:(psycopg2.errors.UndefinedObject) dia type doesn't exist
【问题讨论】:
-
不要在变量名和类型之间加逗号。你写了
dia, datetime,去掉逗号。如果您有多个参数,则使用逗号分隔名称类型对:create function x(name varchar, age int, birthdate date)
标签: sql python-3.x postgresql sqlalchemy