我使用的是PostgreSQL 14.5
我可以使用Postgres关键字QUARTER
按季度对年份进行分类,如documentation中所示,就像SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40');
一样。它工作正常。默认季度以January
开始。这完全有意义。即,第一季度由January
、February
和March
组成。其他季度随后。但是,我想使月份可配置,以便季度可以在任何月份开始。
例如,如果月份以April
开始,则April
、May
和July
将是第一季度。
我已经开始编写我的自定义函数来提出一个解决方案,但是,
我可以在不创建自定义函数的情况下执行此操作吗?
3条答案
按热度按时间6l7fqoea1#
她的是:
ar5n3qh52#
所选解决方案的问题是 * 使月份可配置,以便季度可以在任何月份开始 * 是不可能的;你必须改变查询来改变开始的月份。2下面是一些允许这种配置的自定义函数。
上面定义了一个季度为从指定月份开始的连续3个月。它从该月份构建了一个“季度”月历。如果指定的月份无效,则函数返回
null
。第二个函数是上述函数的传递。它的不同之处在于开始月份被指定为test,即月份名称。Note受本地月份名称的影响,但很容易更新。虽然它是一个自定义函数,但也是一个SQL语句。该语句可以被提取出来并独立运行;你只需要传递参数。
和前面的函数一样,如果提供了一个无效的月份名,这个函数返回null。但是,和第一个不同,它不能被提取出来并独立运行。(参见demo包含的每个)
fv2wmkja3#
您可以使用简单的条件语句来完成它如下:
您的查询:
| 萃取物|
| - ------|
| 1个|
解决方案查询(季度从4月开始):
| 季度|
| - ------|
| 第四季度|
从七月开始的季度:
fiddle
你也可以像@nikhil sugandh建议的那样使用
interval
来改变实际日期。如果你想把四月作为起始月份,那么你需要从你的实际日期中减去3。如果这个月是七月,那么你需要减去6。
| 萃取物|
| - ------|
| 四个|
fiddle