[sql] to_char () 함수를 사용하지 않고 PostgreSQL의 날짜에서 연도와 월을 추출하는 방법은 무엇입니까?

sql :을 선택하고 싶습니다.
SELECT "year-month" from table group by "year-month" AND order by date여기서 year-month-날짜 형식은 “1978-01”, “1923-12″입니다.
couse work의 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 년이 다가올 때까지).


답변

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


답변

첫 번째 옵션

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 날짜-시간


답변

보다 작지 않은 “보다 큼”기능에 대해 작동합니다.

예를 들면 :

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;

오류가 발생합니다.