Я хочу выбрать sql:,
SELECT "year-month" from table group by "year-month" AND order by date
где год-месяц - формат даты «1978-01», «1923-12».
выберите to_char работы , но не в "правильном" порядке:
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 работы , но не в "правильном" порядке:
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 года).
ORDER BY
встречаться.
ORDER BY to_char(timestamp, 'YYYY-MM')
. Или, если вы это сделали, SELECT to_char(timestamp, 'YYYY-MM') AS date
вы можете просто использовать ORDER BY date
.
Используйте этот 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;
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
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
2-й вариант
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;
Я получаю ошибку