SQL Seltsame Umwandung

  • Ersteller Ersteller VirusDeluXe
  • Erstellt am Erstellt am
V

VirusDeluXe

Gast
Guten Tag,

ich arbeite nun schon länger mit SQL, weil es einfach eine Grundlage ist die man beherrschen sollte, aber folgendes Phänomen hatte ich (vermutlich aufgrund dessen, dass ich nie so ein schlechtes und fertiges Datenmodell vorliegen hatte) noch nie.

Es geht darum:

Eine Tabelle XY hat mehrere Informationen. Von diesen vielen Spalten sind zwei Spalten ein Datumsfeld und zwei Spalten ein Zeitfeld. Dabei handelt es sich um das Anfangsdatum + Zeit und um das Enddatum + Zeit.

start_date | start_time | end_date | end_time
13.07.2006 | 11:11:43 | 13.07.2006 | 11:12:15

Auf dieser Entwicklungsumgebung gibt es allerdings NULL-Felder bei dem "end_date" und der "end_time".
Nun haben wir uns darauf geeinigt, dass ich - falls NULL-Felder vorhanden sind - einfach die Startwerte anzeigen lasse. Das Problem mit dem Datum konnte ich in der View ganz einfach folgendermaßen lösen:

Code:
...
COALESCE (end_date, start_date) AS end_date
...

Nun habe ich versucht das Selbe mit der Zeit zu veranstalten. Definiere ich aber nun folgendermaßen:

Code:
...
COALESCE (end_time, start_time) AS end_time
...

Dann werden mir normale Zahlen ausgegeben. War z.B. die Zeit davor "00:00:05", dann kommt auf einmal eine "7" heraus. Mal vollkommen davon abgesehen, dass die ganze Spalte dann nurnoch aus normalen Zahlenwerten besteht.
Ich brauche aber die Anfangszeit definitiv und ganz normal in dem Format "HH:MM:SS". Hat jemand von euch eine Idee und kennt dieses Verhalten?

Vielen herzlichen Dank bereits im vorraus!

MfG,
Dennis Maier
Ergänzung ()

Hat sich schonwieder erledigt ... das Schreiben tat offensichtlich sehr gut :-)
 
Hi,

schreib doch bitte Deine Lösung hier hin. Damit andere beim gleichen Problem eine Lösung finden ;)
 
Sorry, ist alles etwas stressig hier auf Arbeit, aber hast natürlich recht.

Also: Für diejenigen die lediglich die Zeit wieder konkret sehen wollen, für die reicht es einen einfachen CAST um das COALESCE zu bauen.

Das würde folgendermaßen aussehen:

Code:
...
 CAST (COALESCE (v01.time_end, v01.time_start) AS TIME) AS end_time_detail
...

ACHTUNG: Was mir bei dieser Lösung auffällt ist, dass ich nicht zu 100% den identischen Wert von "time_start" bekomme. In "time_start" (normal als Spalte) steht z.B. 00:00:05 und einer vorher betroffenen NULL-Spalte mit "time_end" steht nun 00:00:07. Es ist also eine keine 100%tige Übereinstimmung.

Da mein Gesamt-Konstrukt noch etwas komplexer war, musste ich nun etwas völlig anderes tun (würde hier auch den Rahmen sprengen), aber vieleicht hilft das bereits dem ein oder anderen Menschen der sich wundert, warum auf einmal fortlaufende Ganzzahlen nach dem COALESCE kommen.
 
Danke,

aber da Dein Problem nicht sauber gelöst ist, gehe ich mal davon aus, dass der SQL-Datenbank von Microsoft ist. Der rechnet bei COALESCE leider falsch.
Verwende hier einfach "isNull" :D

Code:
isNull(end_date, start_date) AS end_date
 
Zurück
Oben