sql - 如何在 PostgreSQL 中根据日期为日期赋值?
问题描述
我正在使用 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
解决方案
postgres EXTRACT 函数将提取日期的一部分,因此我想您可以制作如下内容:
MOD(EXTRACT(year FROM yourdate), 100) +
CASE WHEN EXTRACT(month FROM yourdate) > 9 THEN 1 ELSE 0 END
第一个获取两位数的日期,第二个获取 0 或 1 以添加取决于月份
ps; 我不确定我是否会称这样的函数为“get_season”,一年有 4 个季节等 - 也许是“get_academic_year”,但这完全是上下文相关的,我敢肯定。他们看到了“季节”这个词
推荐阅读
- javascript - AJAX jQuery 新版本关于“插入数据库而不加载页面”
- r - R tablegrob 条件格式,用于根据列值设置颜色
- api - 我使用 JWT 身份验证时无法使用 Symfony 登录 - Symfony 3.4
- unicode - Unicode 字符的名称
- windows - 如果我的 .vimrc 包含 `:cd` 命令,使用文件作为参数启动 Vim 不起作用
- reactjs - 如何在打字稿中导入 react-cookie
- angular - Angular 6/PrimeNG 中的异步加载工具提示
- python - Python:将列表写入xml文件
- javascript - NextSibling 是如何工作的?
- testing - 如何使用量角器测试生成 jhipster 应用程序