ich versuche derzeit, die folgende Abfrage auf einer Oracle DB
auszuführen %Vor%Es scheint nicht sehr kompliziert zu sein. Nur der Name der Timzone und der UTC-Offset in geschweiften Klammern. Aber wenn ich die Abfrage mit PL / SQL Developer auf Windows ausführe, frisst es immer die letzte geschweifte Klammer.
Also bin ich zu sqlplus gegangen und habe es dort ausgeführt und jetzt bekomme ich meine letzte Klammer, aber auch einen zusätzlichen Whitespace vor der letzten geschweiften Klammer als Extra-Goody.
Ich habe es mit verschachtelten to_char()
und trim()
versucht, aber nichts ändert sich. Ich habe es auch auf verschiedenen DBs versucht, aber es ist immer das Gleiche.
Weiß jemand, ob es ein Problem mit tz_offset
und String-Verkettung gibt?
Ausstellen der folgenden Abfrage:
%Vor%Sie erhalten Ergebnisse wie diese:
%Vor% Dies zeigt, dass tz_offset()
nullterminierte Strings zurückgibt (möglicherweise ein Bug). Für Ihre Anfrage gibt Oracle also
In Anbetracht dessen denke ich, dass PL / SQL-Entwickler \ 0 als Ende der Zeichenkette interpretiert (vielleicht ein anderer Fehler, SQL-Zeichenketten sind nicht null-terminiert) und es macht also keine Mühe, den Rest der Zeichenkette zu schreiben, So verlieren Sie die nachlaufende Klammer. SQL * PLus wählt stattdessen anstelle des Nullwerts ein Leerzeichen und fährt dann mit dem Rest der Zeichenfolge fort, wobei die schließende Klammer gedruckt wird.
Als Workaround können Sie tz_offset(...)
durch replace(tz_offset(...), chr(0))
ersetzen. Dies löscht Nullen von allem, was tz_offset(...)
zurückgibt.
Es funktioniert mit Substring, aber das beantwortet nicht wirklich Ihre Frage, warum es passiert: -):
wähle tzname || '(UTC' || substr (tz_offset (tzname), 1,6) || ')' aus v $ timezone_names;
Tags und Links oracle oracle10g plsqldeveloper