我正在使用postgresql,希望创建一个函数并在同一个查询中使用它。我要创建的函数应该与下面的python函数执行相同的操作:
def get_season(dia):
season = (abs(dia.year) % 100) + (1 if dia.strftime('%m-%d') >= '10-01' else 0)
return season
给定datetime,函数返回年份的最后两位,如果日期大于10月1日,则返回前一位加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
2条答案
按热度按时间polhcujo1#
以下操作应做到这一点:
条件
extract(month from p_input) > 9
检查日期是在10月还是更晚,并返回下一年的值。不过,我强烈建议不要使用两位数的年份。
ijnw1ujt2#
postgres extract函数将提取部分日期,因此我可以想象您可以这样做:
第一个获取两位数的日期,第二个获取0或1以根据月份进行添加
聚苯乙烯;我不确定我是否会将这样一个函数称为“get\u season”,一年有四个季节等等-也许是“get\u academic\u year”,但我确定这完全是上下文关系。。只是一个不知情的第三方看到“季节”这个词时的假设