Как извлечь год и месяц от даты в PostgreSQL без использования функции to_char ()? - PullRequest
84 голосов
/ 25 декабря 2010

Я хочу выбрать 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')

Ответы [ 7 ]

145 голосов
/ 24 июня 2013
to_char(timestamp, 'YYYY-MM')

Вы говорите, что заказ не "правильный", но я не могу понять, почему он неправильный (по крайней мере, до 10000 года).

45 голосов
/ 25 декабря 2010
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

31 голосов
/ 09 августа 2014

Используйте метод date_trunc для усечения выходного дня (или чего-либо еще, например, недели, года, дня и т. Д.)

Пример группировки продаж иззаказов по месяцам:

select
  SUM(amount) as sales,
  date_trunc('month', created_at) as date
from orders
group by date
order by date DESC;
11 голосов
/ 20 января 2016

Вы можете усечь всю информацию после месяца, используя date_trunc(text, timestamp):

select date_trunc('month',created_at)::date as date 
from orders 
order by date DESC;
9 голосов
/ 25 ноября 2017

Вы можете использовать функцию EXTRACT pgSQL

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

Для более подробной информации PGSQL Date-Time

9 голосов
/ 14 ноября 2017

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, отлично работало в моем случае. Я действительно хотел отказаться от «дневной» информации.

0 голосов
/ 28 февраля 2019

Работает для функций «больше чем» не менее чем на.

Например:

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;

Я получаю ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...