# [Oracle] Zusammengesetzte Daten



## Communicate (5. Januar 2010)

Hallo zusammen, 

ich bin am verzweifeln. 

Folgendes Stück Code will einfach nicht funktionieren:


```
to_date(to_char(kundenstamm.vertragsbeginn,'dd.mm.') || to_char(SYSDATE,'YYYY'),'dd.mm.yyyy')
```

Die Fehlermeldung von Oracle lautet ORA-01861: Literal stimmt nicht mit dem Format der Zeichenfolge überein.

Ganz blauäugig wie ich bin, finde ich aber schon, dass mein zusammengesetzes Datum aussieht wie ein Datum ==> Es kommt ja dd.mm. + YYYY raus, oder?

Kann mir vielleicht einer von Euch einen Tip geben, wo mein Denkfehler liegt?

Grüße
Communicate


----------



## Yaslaw (5. Januar 2010)

bei TO_DATE musst du noch das Datumsformat mitgeben. Ansonsten nimmt er wahrscheinlich das amerikanische Format...

```
TO_DATE('05.01.2010', 'dd.mm.YYYY')
```

in deinem Fall also

```
to_date(to_char(kundenstamm.vertragsbeginn,'dd.mm.') || to_char(SYSDATE,'YYYY'), 'dd.mm.YYYY')
```


----------



## Communicate (5. Januar 2010)

Hallo yaslaw, 

danke für die schnelle antwort.

Hat leider nichts gebracht :-( 
Fehler ist weiterhin der gleiche :-(


Hast Du noch eine Idee?

Grüße
Communicate


----------



## Communicate (5. Januar 2010)

Ahhhhhh....

Fehler gefunden und neues Problem:

Das Feld ist leider nicht immer gefüllt, so dass es bei leeren Feldern korrekterweise zum Fehler kommt.

Wie bastle ich denn jetzt meine Codezeile so um, dass es nur die gefüllten Werte nimmt.
Funktioniert hier ein 


```
select 
case when isnull ...
```
 ?


----------



## Yaslaw (5. Januar 2010)

Da NVL nicht geht, weil du eine Funktion einsetzt, würd ich es auch mit CASE lösen
Null vergleichst du in Oracle mit IS NULL
Also

```
SELECT
    CASE 
		WHEN ks.vertragsbeginn NOT IS NULL 
		THEN to_date(to_char(ks.vertragsbeginn,'dd.mm.') || to_char(SYSDATE,'YYYY'), 'dd.mm.YYYY') 
		ELSE NULL
	END AS new_vertragsbeginn
FROM
	kundenstamm ks;
```


----------



## dbwizard (5. Januar 2010)

yaslaw hat gesagt.:


> WHEN ks.vertragsbeginn NOT IS NULL



Kleine Korrektur : 

Dies müsste wohl 

```
WHEN ks.vertragsbeginn IS NOT  NULL
```
sein ?


Gruss


----------



## Yaslaw (5. Januar 2010)

Jupp, man sollte nicht auswendig schreiben ohne zu testen *g*


----------



## Communicate (5. Januar 2010)

Perfekt! Danke!


----------

