如何在 PostgreSQL 中提取日期中的年份和月份,而不使用 to_char() 函数?

我想选择 sql: SELECT "year-month" from table group by "year-month" AND order by date哪里 年-月-日期“1978-01”、“1923-12”的格式。 选择 to _ char of couse work ,但不是“正确”顺序:

to_char(timestamp_column, 'YYYY-MM')
353719 次浏览
date_part(text, timestamp)

例如:。

date_part('month', timestamp '2001-02-16 20:38:40'),
date_part('year', timestamp '2001-02-16 20:38:40')

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

to_char(timestamp, 'YYYY-MM')

你说顺序是不“正确”的,但我不明白为什么它是错误的(至少在10000年到来之前)。

使用 date_trunc方法截断一天(或者其他你想要的,例如,一周,一年,一天等等)

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

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

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

select date_trunc('month',created_at)::date as date
from orders
order by date DESC;


示例: < br/>
输入:

created_at = '2019-12-16 18:28:13'

产出1:

date_trunc('day',created_at)
// 2019-12-16 00:00:00

产出2:

date_trunc('day',created_at)::date
// 2019-12-16

产出3:

date_trunc('month',created_at)::date
// 2019-12-01

产出4:

date_trunc('year',created_at)::date
// 2019-01-01

第一个选择

date_trunc('month', timestamp_column)::date

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

例如:

2016-08-01
2016-09-01
2016-10-01
2016-11-01
2016-12-01
2017-01-01

第二个选择

to_char(timestamp_column, 'YYYY-MM')

这个由@yairchu 提出的解决方案在我的案例中运行良好。我真的想丢弃“天”信息。

可以使用 EXTRACT 函数 pgSQL

EX- date = 1981-05-31
EXTRACT(MONTH FROM date)
it will Give 5

了解更多细节 日期时间

它正在为“大于”函数工作,而不是小于。

例如:

select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) > '2000' limit 10;

一切正常。

但是

select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) < '2000' limit 10;

我出错了。