web-dev-qa-db-fra.com

Comment extraire année et mois à partir de la date dans PostgreSQL sans utiliser la fonction to_char ()?

Je veux sélectionner sql: SELECT "year-month" from table group by "year-month" AND order by date, où année-mois - format de la date "1978-01", "1923-12". sélectionnez to_char of couse work, mais pas le "bon" ordre:

to_char(timestamp_column, 'YYYY-MM')
85
Bdfy
date_part(text, timestamp)

par exemple.

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

48
MK.
to_char(timestamp, 'YYYY-MM')

Vous dites que la commande n'est pas "correcte", mais je ne vois pas pourquoi elle est fausse (au moins jusqu'à l'année 10000).

146
yairchu

Utilisez le date_trunc méthode pour tronquer la journée (ou tout ce que vous voulez, par exemple semaine, année, jour, etc.)

Exemple de regroupement des ventes à partir de commandes par mois:

select
  SUM(amount) as sales,
  date_trunc('month', created_at) as date
from orders
group by date
order by date DESC;
31
Gerry Shaw

Vous pouvez tronquer toutes les informations après le mois en utilisant date_trunc(text, timestamp) :

select date_trunc('month',created_at)::date as date 
from orders 
order by date DESC;
12
Aya

1ère option

date_trunc('month', timestamp_column)::date

Il conservera le format de date avec tous les mois à partir du premier jour.

Exemple:

2016-08-01
2016-09-01
2016-10-01
2016-11-01
2016-12-01
2017-01-01

2ème option

to_char(timestamp_column, 'YYYY-MM')

Cette solution proposée par @yairchu a bien fonctionné dans mon cas. Je voulais vraiment me débarrasser des infos du jour.

10
Luis Martins

Vous pouvez utiliser la fonction EXTRACT pgSQL

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

Pour plus de détails PGSQL Date-Time

9
Singhak

Il travaille pour "supérieur à" fonctions pas pour moins que.

Par exemple:

select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) > '2000' limit 10;

fonctionne bien.

mais pour

select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) < '2000' limit 10;

Je reçois une erreur.

0
Anurag Bhardwaj