2017-02-09 2 views
0

Sollte das nicht nur funktionieren?Extract Date Komponenten mit Unterabfrage in Postgres

select extract(DAY FROM TIMESTAMP (select to_timestamp('2015-02-23','YY-MM-DD')::timestamp)) 

ERROR: syntax error at or near "select" 
LINE 1: select extract(YEAR FROM TIMESTAMP (select to_timestamp('201... 
             ^
********** Error ********** 

ERROR: syntax error at or near "select" 
SQL state: 42601 
Character: 37 

Wie hier erklärt extract doc

Jede Hilfe ist willkommen Thanks :)

+0

Ihre Fehlerausgabe stimmt nicht mit der Abfrage überein. Warum gibst du einen Timestamp auf Timestamp? –

Antwort

0

Die folgende Abfrage wird Ihnen die Ergebnisse, die Sie wollten:

select extract(DAY FROM (select to_timestamp('2015-02-23','YYYY-MM-DD'))); 

Probleme ich mit Ihrem aktuellen Ansatz sehen:

  • Wie @harmic darauf hingewiesen hat, benötigen Sie das Schlüsselwort TIMESTAMP nicht, da die to_timestamp()-Funktion bereits einen Zeitstempeltyp zurückgibt.
  • Darüber hinaus können Sie zu einem Zeitstempel das Ergebnis von to_timestamp() wieder warfen, die nicht
  • Ihre Formatierungsmaske für den Zeitstempel benötigt wird, ist falsch. Sie haben YY-MM-DD verwendet, aber es sollte wirklich YYYY-MM-DD sein, zu berücksichtigen, dass Sie ein vierstelliges Jahr haben. Dies könnte in diesem Fall keine Rolle spielen, aber wenn Sie planen, das Jahr zu extrahieren, könnte es wichtig sein.
+1

Die Subselect ist nicht notwendig: 'Wählen Sie extrahieren (DAY FROM to_timestamp ('2015-02-23', 'JJJJ-MM-DD'))' –

+0

Danke @ClodoaldoNETo – vairowalia

0

Das funktioniert:

psql=> select extract(DAY FROM (select to_timestamp('2015-02-23','YY-MM-DD')::timestamp)) 
; 
date_part 
----------- 
     23 
(1 row) 

Das ist, weil die Syntax von extract ist:

EXTRACT(field FROM source) 

Das Schlüsselwort TIMESTAMP in Ihrem Beispiel ist tatsächlich Teil eines literalen Zeitstempels, aber Sie verwenden keinen literalen Zeitstempel, sondern einen skalaren Unterabfrageausdruck, also lassen Sie TIMESTAMP aus.

See:

+0

Schätzen Sie Ihre Antwort funktioniert es dank @harmic – vairowalia