DB2: Datum in bestimmtes Format umwandeln?!

CurlyConny

Mitglied
Hallo!

Ich bin eine blutige Anfängerin und möchte gerne ein Datum umwandeln.

Folgendes Format habe ich:

z.B. 31-Dec-2007

In meiner Tabelle steht allerdings das Datumsformat 31.12.2007

Wie kann ich das in einer select-Abfrage beim Vergleich erreichen?
Muss ich die komplette Spalte konvertieren? Wenn ja, wie? Oder gibt es ein einfacher Befehl, mit dem ich das Datum in der Query umwandeln kann?
Hoffe, ihr könnt mir weiterhelfen.

Danke und LG
Conny
 
Hallo CurlyConny,

mit einer solchen Abfrage haben nicht nur blutige Anfänger Probleme ;)

Folgende Lösung gibt es für Dein Problem:

SELECT Format(Datum, 'DD-MMM-YYYY') FROM Tabelle;

Du kannst ein Datum auch im SELECT Bereich umformatieren.
Um nun den Monat in Form der ersten drei Buchstaben ausgegeben zu bekommen, musst Du die Formatierung MMM verwenden.

Ich wünsche noch eine geruhsame Nacht und hoffe gut geholfen zu haben. ;)
 
Hallo!
Danke für die Antwort...werde die Abfrage später mal ausprobieren.
Allerdings muss ich 31-Dec-2007 in 21.12.2007 umwandeln. Aber das müßte ja dann genauso gehen, oder ;-)
Also statt DD-MMM-YYYY in DD.MM.YYYY?!

LG
Conny
 
hallo!

leider besteht das problem weiterhin...

ich habe folgende abfrage:

SELECT SUM(sales) FROM sales WHERE sales_date = '31-Dec-2007'

Logischerweise bekomme ich eine Fehlermeldung, weil der Datentyp falsch ist...aber wie kann ich das übergebene Datum (31-Dec-2007) umwandeln?

LG
Conny
 
Hi,

das was Sphinx-Flash schon vorgeschlagen hatte mußt du glaube ich noch anwenden:
SQL:
-- diese query
SELECT SUM(sales) 
FROM sales 
WHERE sales_date = '31-Dec-2007'

-- wird zu 
SELECT 
SUM(sales) FROM sales 
WHERE Format(sales_date, 'DD-MMM-YYYY') sales_date = '31-Dec-2007'

Leider kenne ich micht nicht so gut mit DB2 aus, aber du mußt auf jeden Fall in der WHERE bedingung formatieren.

Lieben Gruß
 
Zuletzt bearbeitet von einem Moderator:
Ok, jetzt habe ich nochmal eine Anfrage gemacht...aber ich bekomme immer noch folgenden Fehler :confused:

------------------------------ Eingegebene Befehle ---------------------------
SELECT SUM(sales) FROM sales WHERE Format(sales_date, 'DD-MMM-YYYY') sales_date = '31-Dec-2007';
------------------------------------------------------------------------------
SELECT SUM(sales) FROM sales WHERE Format(sales_date, 'DD-MMM-YYYY') sales_date = '31-Dec-2007'
SQL0104N Auf "date, 'DD-MMM-YYYY')" folgte das unerwartete Token
"sales_date". Zu den möglichen Token gehören: "<space>". SQLSTATE=42601

SQL0104N Auf "date, 'DD-MMM-YYYY')" folgte das unerwartete Token "sales_date". Zu den möglichen Token gehören: "<space> ".

Erläuterung:

Bei dem Token, das auf "<text>" folgt, wurde ein Syntaxfehler in der
SQL-Anweisung oder der Eingabebefehlszeichenfolge für die Prozedur
SYSPROC.ADMIN_CMD festgestellt. Das Feld "<text>" enthält die 20 Zeichen
der SQL-Anweisung oder der Eingabebefehlszeichenfolge für die Prozedur
SYSPROC.ADMIN_CMD, die dem ungültigen Token unmittelbar vorangehen.

Als Hilfestellung wird im Feld SQLERRM des SQL-Kommunikationsbereichs
(SQLCA) eine Liste möglicher Token "<tokenliste>" angezeigt. Bei der
Zusammenstellung dieser Liste wird davon ausgegangen, dass die Anweisung
bis zum angegebenen Punkt korrekt ist.

Die Anweisung kann nicht verarbeitet werden.

Benutzeraktion:

Überprüfen Sie die Anweisung im Bereich des ungültigen Token, und
korrigieren Sie sie.

sqlcode: -104

sqlstate: 42601
 
Hallo CurlyConny,

habe eben gesehn, daß Du immer noch verzweifelt versuchst den Code abzufragen. Nu wird allerdings schon deutlicher, worauf Du hinaus willst... lach...

Das Feld sales_date ist ein Datumsfeld oder ein Textfeld?
Ich hoffe es ist ein Datumsfeld... Bei einem Textfeld müßten wir noch die Funktion: Datevalue verwenden... aber ich will Dich jetzt nicht weiter verwirren.

In welcher Programmiersprache willst Du denn die Abfrage starten? In php in VB?

Der untere SQL-String kann schon mal nicht funktionieren :

SELECT SUM(sales) FROM sales WHERE Format(sales_date, 'DD-MMM-YYYY') sales_date = '31-Dec-2007';

Das zweite sales_date ist zuviel:

SELECT SUM(sales) FROM sales WHERE Format(sales_date, 'DD-MMM-YYYY') = '31-Dec-2007';


Normalerweise wird ein Datum in SQL mit folgender Formatierung abgefragt (sofern es sich um ein Datumsfeld handelt:

#mm/dd/yyyy#
Dabei ist es eigentlich unerheblich, wie das Datum in der Datenbank formatiert ist.
In VB bspw. erreichst Du das folgendermaßen:

WHERE sales_date = " & Format("31.12.2007", "\#mm\/dd\/yyyy\#") & ";"
oder
WHERE sales_date = #07/04/2008#;


Das bedeutet: Prinzipiell mußt Du das abzufragende Datum SQL konform konvertieren.

Ich hoffe, Dich jetzt nicht weiter verwirrt zu haben.
 
hallo!
es wird immer verwirrender ;-)

sales_date ist ein datumsfeld...

jetzt habe ich die abfrage wie oben eingegeben und erhalte folgenden fehler:

------------------------------ Eingegebene Befehle ---------------------------
SELECT SUM(sales) FROM sales WHERE Format(sales_date, 'DD-MMM-YYYY') = '31-Dec-2007';
------------------------------------------------------------------------------
SELECT SUM(sales) FROM sales WHERE Format(sales_date, 'DD-MMM-YYYY') = '31-Dec-2007'
SQL0440N Es wurde keine berechtigte Routine "FORMAT" des Typs "FUNCTION" mit
kompatiblen Argumenten gefunden. SQLSTATE=42884

SQL0440N Es wurde keine berechtigte Routine "FORMAT" des Typs "FUNCTION " mit kompatiblen Argumenten gefunden.

Erläuterung:

Dieser Fehler tritt bei einem Verweis auf die Routine "<routinenname>"
auf, wenn der Datenbankmanager keine Routine zur Implementierung des
Verweises finden kann. Mögliche Ursachen:
* "<routinename>" wurde entweder nicht korrekt angegeben oder ist in
der Datenbank nicht vorhanden.
* Das qualifizierende Merkmal eines qualifizierten Verweises wurde
falsch angegeben.
* Der SQL-Pfad des Benutzers enthält nicht das Schema, zu dem die
angeforderte Funktion oder Methode gehört, und es wurde ein nicht
qualifizierter Verweis verwendet.
* Die Anzahl der angegebenen Argumente ist ungültig.
* Die Anzahl der angegebenen Argumente in der Funktion oder dem
Methodenverweis ist richtig, der Datentyp mindestens eines Arguments
ist jedoch nicht korrekt.
* Die Routine ist mit der Funktions-ID, die beim Binden des Pakets
verwendet wurde, nicht in der Datenbank vorhanden (gilt für statische
Anweisungen).
* Die Mutationsmethode, die einer Attributzuordnung in einer Anweisung
UPDATE entspricht, wurde nicht gefunden. Der Datentyp des neuen Werts
für das Attribut ist kein Datentyp, der mit Datentyp des Attributs
übereinstimmt oder in diesen überführt werden kann.
* Der Aufrufer der Routine ist zur Ausführung der Routine nicht
berechtigt.

Benutzeraktion:

Beheben Sie den Fehler, und wiederholen Sie den Versuch. Die
Fehlerbehebung kann Korrekturen wie den Zugriff auf den Katalog, das
Ändern der Anweisung, die Ausführungsberechtigung für den Aufrufer der
Routine, das Hinzufügen neuer Funktionen und/oder das Ändern des
SQL-Pfads erforderlich machen.

sqlcode: -440

sqlstate: 42884

was ist nun wieder falsch?
 

Neue Beiträge

Zurück