Haben Sie eine Tabelle mit einer Spalte wie dieser:

   first_day_month         
   01/07/2020    
   01/07/2020    
   01/08/2020    
   01/09/2020   
  .......

Müssen Sie eine Spalte wie Jahr-Monat erstellen, Versuchte to_char(first_day_month, 'MM/YYYY'), bekam aber einen Fehler:

Error running query: INVALID_FUNCTION_ARGUMENT: Failed to tokenize string [M] at offset [0]

Versucht

concat(extract(year from first_day_month),'-',extract(month from first_day_month) ) as month,

Mit einem Fehler:

Error running query: SYNTAX_ERROR: line 2:1: Unexpected parameters (bigint, varchar(1), bigint) for function concat. Expected: concat(array(E), E) E, concat(E, array(E)) E, concat(array(E)) E, concat(varchar)

Habe auch date_parse ausprobiert, aber nicht richtig verstanden, eine Idee? Vielen Dank

0
newleaf 7 Okt. 2020 im 02:21

2 Antworten

Beste Antwort

Sie müssen zuerst TO_DATE verwenden, um die Spalte in ein korrektes Datum zu konvertieren. Verwenden Sie dann TO_CHAR, um wie gewünscht zu formatieren:

SELECT TO_CHAR(TO_DATE(first_day_month, 'DD/MM/YYYY'), 'MM/YYYY') AS my
FROM yourTable;

Beachten Sie, dass Sie in diesem Fall, da der gewünschte Textmonatsjahr genau der richtige Teilstring ist, hier auch direkt RIGHT verwenden können:

SELECT RIGHT(first_day_month, 7)
FROM yourTable;

Beachten Sie schließlich, dass YYYY/MM im Allgemeinen ein besseres Format ist, da es richtig sortiert wird. Erwägen Sie also möglicherweise die Verwendung dieser Version:

SELECT TO_CHAR(TO_DATE(first_day_month, 'DD/MM/YYYY'), 'YYYY/MM') AS ym
FROM yourTable;
2
Tim Biegeleisen 6 Okt. 2020 im 23:29

Ihre Daten scheinen nicht vom Typ DATE zu sein, sind möglicherweise Zeichenfolgen und müssen dann zuerst in den Typ DATE konvertiert und den Anzeigestil wie gewünscht formatiert werden:

SELECT TO_CHAR(first_day_month::DATE,'MM/YYYY') AS first_day_month
  FROM t

Demo

0
Barbaros Özhan 6 Okt. 2020 im 23:34