Chcę wybrać sql
SELECT "year-month" from table group by "year-month" AND order by date
:, gdzie rok-miesiąc - format daty „1978-01”, „1923-12”.
wybierz to_char of couse work , ale nie „właściwą” kolejność:
to_char(timestamp_column, 'YYYY-MM')
Chcę wybrać sql
SELECT "year-month" from table group by "year-month" AND order by date
:, gdzie rok-miesiąc - format daty „1978-01”, „1923-12”.
wybierz to_char of couse work , ale nie „właściwą” kolejność:
to_char(timestamp_column, 'YYYY-MM')
Odpowiedzi:
date_part(text, timestamp)
na przykład
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')
Mówisz, że kolejność nie jest „dobra”, ale ja nie rozumiem, dlaczego jest niewłaściwa (przynajmniej do czasu, gdy nadejdzie rok 10000).
ORDER BY
randkować.
ORDER BY to_char(timestamp, 'YYYY-MM')
. Lub alternatywnie, jeśli tak SELECT to_char(timestamp, 'YYYY-MM') AS date
, możesz po prostu użyć ORDER BY date
.
Użyj date_trunc
metody, aby skrócić dzień (lub cokolwiek innego, np. Tydzień, rok, dzień itp.)
Przykład grupowania sprzedaży z zamówień według miesięcy:
select
SUM(amount) as sales,
date_trunc('month', created_at) as date
from orders
group by date
order by date DESC;
Możesz skrócić wszystkie informacje po miesiącu, używając 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'
Wyjście 1:
date_trunc('day',created_at)
// 2019-12-16 00:00:00
Wyjście 2:
date_trunc('day',created_at)::date
// 2019-12-16
Wyjście 3:
date_trunc('month',created_at)::date
// 2019-12-01
Wyjście 4:
date_trunc('year',created_at)::date
// 2019-01-01
1 opcja
date_trunc('month', timestamp_column)::date
Zachowa format daty z wszystkimi miesiącami zaczynającymi się od pierwszego dnia.
Przykład:
2016-08-01
2016-09-01
2016-10-01
2016-11-01
2016-12-01
2017-01-01
2. opcja
to_char(timestamp_column, 'YYYY-MM')
To rozwiązanie zaproponowane przez @yairchu sprawdziło się w moim przypadku. Naprawdę chciałem odrzucić informacje o „dniu”.
Możesz użyć funkcji EXTRACT pgSQL
EX- date = 1981-05-31
EXTRACT(MONTH FROM date)
it will Give 05
Aby uzyskać więcej informacji, PGSQL Date-Time
Działa dla funkcji „większe niż” nie mniej niż.
Na przykład:
select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) > '2000' limit 10;
działa dobrze.
ale dla
select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) < '2000' limit 10;
Otrzymuję błąd.