如何从PostgreSQL中的日期中提取年份和月份?

Bdf*_*dfy 89 sql postgresql

我想选择sql : SELECT "year-month" from table group by "year-month" AND order by date,其中年 - 月 - 格式为日期"1978-01","1923-12".选择to_char工作,但不是"正确"的顺序.

yai*_*chu 153

to_char(timestamp, 'YYYY-MM')
Run Code Online (Sandbox Code Playgroud)

你说订单不是"正确的",但我不明白为什么它是错的(至少到10000年左右).

  • 我不明白为什么不是公认的答案. (4认同)
  • @Aviator:您可以使用`ORDER BY to_char(timestamp, 'YYYY-MM')`。或者,如果您执行了“SELECT to_char(timestamp, 'YYYY-MM') AS date”,则可以简单地使用“ORDER BY date”。 (2认同)

MK.*_*MK. 52

date_part(文本,时间戳)

http://www.postgresql.org/docs/8.0/interactive/functions-datetime.html

  • 如何一次提取月份和年份?你能举例说明吗? (3认同)
  • date_part('month',timestamp'2001-02-16 20:38:40'),date_part('year',timestamp'2001-02-16 20:38:40') (3认同)
  • 你想做什么?刚拿一根绳子?然后使用你需要的日期格式的to_char函数https://www.postgresql.org/docs/8.2/static/functions-formatting.html (2认同)

Ger*_*haw 33

使用该date_trunc方法截断当天(或任何其他您想要的,例如,周,年,日等).

按月对订单进行分组的示例:

select
  SUM(amount) as sales,
  date_trunc('month', created_at) as date
from orders
group by date
order by date DESC;
Run Code Online (Sandbox Code Playgroud)


小智 12

您可以使用date_trunc(text, timestamp)以下方法截断月份之后的所有信息:

select date_trunc('month',created_at)::date as date 
from orders 
order by date DESC;
Run Code Online (Sandbox Code Playgroud)


Lui*_*ins 11

第一选择

date_trunc('month', timestamp_column)::date
Run Code Online (Sandbox Code Playgroud)

它将保持日期格式,从第一天开始的所有月份.

例:

2016-08-01
2016-09-01
2016-10-01
2016-11-01
2016-12-01
2017-01-01
Run Code Online (Sandbox Code Playgroud)

第二选择

to_char(timestamp_column, 'YYYY-MM')
Run Code Online (Sandbox Code Playgroud)

@yairchu提出的这个解决方案在我的案例中工作得很好.我真的想丢弃'日'信息.


Sin*_*hak 9

你可以使用EXTRACT函数pgSQL

EX- date = 1981-05-31
EXTRACT(MONTH FROM date)
it will Give 05
Run Code Online (Sandbox Code Playgroud)

有关PGSQL日期时间的更多详细信息

  • OP说的是“年和月”,而不仅仅是“年”。 (4认同)