Postgresqlgenerate_series 月份
我正在尝试使用generate_series 函数在PostgreSQL 中生成一个系列。我需要从 2008 年 1 月开始直到当月 + 12
(一年后)的一系列月份。我正在使用并仅限于 PostgreSQL 8.3.14(因此我在 8.4 中没有时间戳系列选项)。
我知道如何获得一系列的日子,例如:
select generate_series(0,365) + date '2008-01-01'
但我不知道如何获得月份。
I'm trying to generate a series in PostgreSQL with the generate_series function. I need a series of months starting from Jan 2008 until current month + 12
(a year out). I'm using and restricted to PostgreSQL 8.3.14 (so I don't have the timestamp series options in 8.4).
I know how to get a series of days like:
select generate_series(0,365) + date '2008-01-01'
But I am not sure how to do months.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
编辑
如果您需要动态计算该数字,以下内容可能会有所帮助:
这会计算自 2008 年 1 月 1 日以来的月数,然后在其上添加 12。
但我同意斯科特的观点:你应该将其放入集合返回函数中,以便你可以执行类似
select * from calc_months(DATE '2008-01-01')
的操作Edit
If you need to calculate the number dynamically, the following could help:
This calculates the number of months since 2008-01-01 and then adds 12 on top of it.
But I agree with Scott: you should put this into a set returning function, so that you can do something like
select * from calc_months(DATE '2008-01-01')
您可以像这样间隔生成_系列:
这将导致:
您还可以通过这种方式加入其他表:
You can interval generate_series like this:
Which would result in:
You can also join in other tables this way:
间隔
generate_series
:您可以像这样 会导致:
You can interval
generate_series
like this:Which would result in:
好吧,如果您只需要几个月,您可以这样做:
并将其解析为日期字符串...
但是因为您知道最终会得到月份 1,2,..,12,为什么不直接使用
selectgenerate_series(1,12);
呢?Well, if you only need months, you could do:
and just parse that into a date string...
But since you know you'll end up with months 1,2,..,12, why not just go with
select generate_series(1,12);
?在
generated_series() 中,您可以定义步骤,在您的情况下为一个月。因此,您可以动态定义开始日期(即 2008-01-01)、结束日期(即 2008-01-01 + 12 个月)和步骤(即 1 个月)。
你得到
In the
generated_series()
you can define the step, which is one month in your case. So, dynamically you can define the starting date (i.e. 2008-01-01), the ending date (i.e. 2008-01-01 + 12 months) and the step (i.e. 1 month).and you get