Oracle TIMESTAMP - Suche nach Datum

Hallo,

ich versuche mir ein bestimmtes Datum in der View V$DIAG_ALERT_EXT anzusehen.
Leider bekomme ich nicht heraus, wie ich die Like-Bedingung schreiben muß.
Das Feld ORIGINATING_TIMESTAMP ist ein „TIMESTAMP(9) WITH TIME ZONE“ Feld.

select ORIGINATING_TIMESTAMP, MESSAGE_TEXT
from sys.V_$DIAG_ALERT_EXT
where ORIGINATING_TIMESTAMP like to_timestamp_tz(‚05.05.2011‘,‚DD.MM.YYYY‘);

ergibt ein leeres Ergebnis, ebenso mit to_timestamp().

wie stellt man das an ? Die Orcle-Doku ist hierbei nicht sehr hilfreich und ein passendes Beispiel habe ich mi Netz noch nicht gefunden.

Danke und Grüße

Chris

Servus Chris,

ich kenne ORACLE zwar überhaupt nicht, aber dennoch habe ich das
Gefühl, dass du zwei inkompatible Datentypen vergleichen willst:

ORIGINATING_TIMESTAMP ist des Typs timestamp,
‚05.05.2011‘ ergibt jedoch einen Wert des Typs date.

Du hast doch sicher eine Funktion die date oder to_date oder so heisst,
also einen Datumswert aus einem timestamp-Wert oder einem Literal zurückgibt.

Versucher bitte mal ob so etwas wie

where to_date(ORIGINATING_TIMESTAMP) = to_date(‚05.05.2011‘)

dein Problem löst.

Wenn nein, musst du leider tatsächlich auf einen Oracle-Kundigen warten …

Gruss,
SomeOne

Hallo SomeOne,

Danke für deine Antwort !

Versucher bitte mal ob so etwas wie

where to_date(ORIGINATING_TIMESTAMP) = to_date(‚05.05.2011‘)

Das geht leider nicht, dann bekommt man die Meldung:
ORA-01830: Datumsformatstruktur endet vor Umwandlung der gesamten Eingabezeichenfolge

Was funktioniert ist, dass ich die Spalte in CHAR umwandle, aber ich möchte in der Regel vermeiden, eine Spalte in der where-Klausel umzuwandeln, da der Aufwand für die Datenbank dann größer ist und falls ein Index auf der Spalte ist (hier nicht der Fall) dann zieht der nicht.

Aber wahrscheinlich werde ich nicht drumherum kommen…

Grüße

Chris

Hi,

oh Schade, war halt nur so ne Idee …

Kann es nicht sein, dass du in Oracle auch das Format mitgeben musst, also so ungefähr etwa

"where to_date(ORIGINATING_TIMESTAMP) = to_date(‚05.05.2011‘,‚DD.MM.YYYY‘)

Irgendwie klingt die Fehlermeldung für mich so als ob nur eine Formatierung fehlt.

Aber gut, dann musst du doch auf einen Oracle-Spezialisten warten.

Viel Erfolg,
SomeOne

Hi,

oh Schade, war halt nur so ne Idee …

Kann es nicht sein, dass du in Oracle auch das Format mitgeben
musst, also so ungefähr etwa

"where to_date(ORIGINATING_TIMESTAMP) =
to_date(‚05.05.2011‘,‚DD.MM.YYYY‘)

Irgendwie klingt die Fehlermeldung für mich so als ob nur eine
Formatierung fehlt.

ja wenn man das zu einem date umwandeln will

datum in literal

DATE ‚2008-11-11‘

oder zum convertieren in ein string

TO_DATE(‚11/11/2008‘, ‚MM/DD/YYYY‘)

http://download.oracle.com/docs/cd/B19306_01/server…

und wegen date und timestamp lese hier nach
http://www.databasejournal.com/features/oracle/artic…

man kann das date bzw timestamp casten .

und wegen date und timestamp lese hier nach
http://www.databasejournal.com/features/oracle/artic…

man kann das date bzw timestamp casten .

CAST(datefield AS TIMESTAMP) AS „DATUM“ = ORIGINATING_TIMESTAMP
CAST(ORIGINATING_TIMESTAMP AS DATE) AS „DATUM“ = datefield

bei dem bin ich mir nicht sicher obs geht.
trunc(ORIGINATING_TIMESTAMP) DATE = datefield

1 Like

Vielen Dank !
Hallo,

vielen Dank für die Link-Sammlung, da werde ich mich mal durchlesen.

Grüße

Chris

Hi!

(ohne zu testen)

select ORIGINATING_TIMESTAMP, MESSAGE_TEXT
from sys.V_$DIAG_ALERT_EXT
where ORIGINATING_TIMESTAMP like
to_timestamp_tz(‚05.05.2011‘,‚DD.MM.YYYY‘);

ergibt ein leeres Ergebnis, ebenso mit to_timestamp().

Warum? Weil der Vergleich ca. so aussieht:

'05.05.2011 13:26:12.31923423' like '05.05.2011'

(für ein „like“ fehlt hier eindeutig ein „%“)

Schon mal ein

trunc(ORIGINATING\_TIMESTAMP)= to\_timestamp\_tz('05.05.2011','DD.MM.YYYY')

probiert?
Wobei die Verwendung von trunc auf allen Vergleichsseiten nicht verboten ist.

Ein

to\_char(ORIGINATING\_TIMESTAMP,'DD.MM.YYYY')='05.05.2011'

könnte ebenfalls behilflich sein …

Grüße,
Tomh