Я хочу выбрать sql: SELECT "year-month" from table group by "year-month" AND order by date
, где год-месяц - формат даты "1978-01", "1923-12". выберите to_char из couse work, но не "правильный" порядок:
to_char(timestamp_column, 'YYYY-MM')
Я хочу выбрать sql: SELECT "year-month" from table group by "year-month" AND order by date
, где год-месяц - формат даты "1978-01", "1923-12". выберите to_char из couse work, но не "правильный" порядок:
to_char(timestamp_column, 'YYYY-MM')
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;
1-й вариант
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 05
Для более подробной информации PGSQL Date-Time
Он работает для функций "больше чем", а не для менее.
Например:
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;
Я получаю ошибку.