2017-10-12 6 views
1

J'ai une table contenant environ 100.000 lignes, avec un champ de date nullable spécifique que j'ai besoin de transformer en plusieurs colonnes. ces colonnes sont accessibles via une vue.Le moyen le plus rapide de transformer le champ date en plusieurs champs dans postgres

à des fins de simplification, disons que je me joins à deux tables appelées tab1 et tab2, le contenu des deux tables est sans importance, sauf le champ de date de tab1

jusqu'à présent la solution que je suis arrivé à est la suivante :

create view result_view as 
    select to_char(t1.date, 'YYYY') AS year, 
      to_char(t1.date, 'MM') AS month, 
      to_char(t1.date, 'YYYY-MM-DD') AS day, 
      t2.value as value 
    from tab t1 left join tab2 t2 on t1.id = t2.id; 

la solution actuelle prend beaucoup de temps, une optimisation?

+0

temps pris n'est pas passé sur 'to_char' ici –

Répondre

2

J'ai une très grande table contenant environ 100.000 lignes,

Ce n'est pas très grand;)

Exécutez votre requête sous explain (analyze, buffers) pour voir où le temps est perdu. En dehors de cela, je suggère d'utiliser extract au lieu de to_char

E.g. extract(YEAR from t1.date) et similaires.

L'extraction est une norme SQL et renvoie des nombres, pas des chaînes. C'est souvent voulu.

En savoir plus sur l'extrait: http://modern-sql.com/feature/extract

+0

la description est modifiée pour décrire la question plus objectivement –

+0

@rachidelkedmiri Vous avez supprimé les mots * très grand * de la question. Mais vous n'avez pas suivi mes suggestions. –

+0

yup. extract, date_part ou https://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT – murison