Probleme beim SQL-Insert mit Datetime

Lautsprecher

Erfahrenes Mitglied
Hi,
ich versuche mit folgende Anweisung einige Daten in unsere Tabelle auf dem MS SQL Server zu schreiben:

Code:
INSERT INTO Zeiterfassung_test
                (employee_ID, check_in_date, check_in_time, check_out_date,  
               check_out_time, group_id, shift, Host_Id, status, working_time, pause)
VALUES     ('3811', '05.10.2005 ', '11:47:09', '', '',  'MUSTERGRUPPE', '', '', '1', '', '')

check_in_date, check_in_time, check_out_date,check_out_time habe alle den Type
datetime in der SQL Datenbank!

Beim Ausführen des Statements steht dann folgendes in der Datenbank:

check_in_date: 10.05.2005
check_in_time: 01.01.1900 11:47:09
Frage: Wie bekommt man das 01.01.1900 aus der Datenbank raus?

check_out_date: 01.09.1900
check_out_time: 01.09.1900
Frage: Die beiden Spalten sollen nicht gefüllt sein. Ich hab es schon probiert mit NULL reinzuschreiben, funktioniert aber nicht richtig. Wie heißt hierfür die richtige Syntax

Danke
 
Hallo,

check_in_date, check_in_time, check_out_date,check_out_time habe alle den Type datetime in der SQL Datenbank!
du hast Datenfelder vom Type DATETIME angelegt. Sagt das nicht, dass diese Felder DATUM UND ZEIT enthalten?
check_in_date: 10.05.2005
check_in_time: 01.01.1900 11:47:09
Frage: Wie bekommt man das 01.01.1900 aus der Datenbank raus?
Wenn du dir die Arbeit gemacht hättest, die Hilfe zu MSSQL anzuschauen, wäre diese Frage überflüssig gewesen. Kein Wert für Datum bedeutet 1.1.1900 und das trifft bei deiner Zuweisung zu, weil du ja nur eine Zeit hineinschreibst und kein Datum.
Du solltest statt der getrennten Datums und Zeitfelder nur jeweils ein Feld anlegen und da DATUM UND ZEIT hineinschreiben (check_in_datetime, check_out_datetime).
check_out_date: 01.09.1900
check_out_time: 01.09.1900
Frage: Die beiden Spalten sollen nicht gefüllt sein. Ich hab es schon probiert mit NULL reinzuschreiben, funktioniert aber nicht richtig. Wie heißt hierfür die richtige Syntax
Warum schreibst du in eine Spalte, in die du nichts reinschreiben willst, etwas hinein. Probier`s mal so:
Code:
INSERT INTO Zeiterfassung_test
    (employee_ID, check_in_date, check_in_time,   
     group_id, shift, Host_Id, status, working_time, pause)
  VALUES
    ('3811', '05.10.2005 ', '11:47:09',  
     'MUSTERGRUPPE', '', '', '1', '', '')
Ich hoffe, meine tlw. blöden Fragen helfen dir weiter.
 
Hi WieGehts
Wie Gehts :)

danke für deine Hilfe, den zweiten Teil mit den "NULL-Felder" konnte ich jetzt umsetzen.
Habe darauf gar nicht geachtet. Aber du hast Recht, warum was befüllen wenn es leer sein soll.

Das DATETIME und 01.09.1900 macht mir aber immer noch Probleme.
Das Tabellenblatt ist nicht von mir angelegt. Ich kann keine Variablentypen ändern.
Erst recht darf ich nicht check_in_time und check_in_date durch ein Feld check_in_datetime ersetzen!

Kann man es irgendwie auch anders lösen, damit er mir 01.09.1900 nicht reinschreibt.
Die Tabelle auf dem MS SQL Server wird auch durch VB' Programme gefüllt und dort stehen die Daten dann glatt ohne 01.09.1900 drinnen. Mein INSERT nimmt eine Java-Applikation vor. An den unterschiedlichen Sprachen darf es ja eigentlich nicht liegen.

Hat vielleicht jemand noch einen Tipp?

Servus
 
Hallo,
hast du dir die Datensätze, die mit VB hineingeschrieben werden mit dem gleichen Programm ausgelesen, mit dem du die von Java geschriebenen gelesen hast? Ich kann mir das nicht vorstellen, dass da ein Unterschied in der Tabelle ist. Lese die Daten mal mit dem Query Analyzer aus (mit Vb und Java eingetragene Datensätze).

Es ist aber möglich bei der weiteren Bearbeitung der Daten durch jedes Programm, sowohl in VB als auch in Java nur die Zeit ohne Datum zu verwenden. Was in der Tabelle steht, ist dann egal. Auch das Rechnen mit der Zeit müsste funktionieren.
 
Hi,
also das VB Programm und mein Java-Pgm schreiben in die Selbe Tabelle. Das VB-Pgm hat mein Arbeitskollege erstellt. Soweit ich weiß füllt er das Feld check_in_time mit dem Time-Ausdruck von VB und check_in_date synchron mit Date!
Ich habe jetzt die Datensätze nochmal ausgelesen!
Bei Zeit erhalte ich: 1899-12-30 14:27:49.0
(Ich formatiere den Satz dann im Pgm so dass ich nur eine Ausgabe von 14:27:49 bekomme)
Bei Datum erhalte ich: 2005-10-11 00:00:00.0

Das komische ist nun, wenn ich den SQL Server Manager starte und direkt in die Tabelle gucke,
steht bei check_in_time 01.01.1900 12:33:41 im Feld (Eingelesen mit Java-Pgm)
und check_in_time 12:33:41 im Feld (Eingelesn mit VB-Pgm)
 
Hallo,

ich habe genau das selbe problem und schaue jetzt seit 2 Tag 16h woran es liegen könnte. Ich verweifle schon langsam. Was ich nicht verstehe wenn ich es mit dem VB den insert befehl ausführe steht bei mir der standart wert 1.1.1900 und wenn ich aber genau den selben Befehl (per Copy & pase) in den Qery analayser kopier und anschließend ausführe habe ich den Fehler nicht. Woran liegt es? Ich weiß es hat irgendwas mit der Datum format zu tun.
Meinen Daten
Code:
Insert Into ImagesInfoTable (ImageNumber, ImageType, ImageReference, UserName, PatientID, DateofShooting, Localisation, Notes, OriginalLabel, OriginalPath, OriginalName, OriginalWidth,OriginalHeight, OriginalSize, ImageLabel, ImagePath, ImageWidth, ImageHeight, ImageSize, ImageDate, IconLabel, IconPath, IconName, IconWidth, Iconheight, IconSize, IconDate,ImageName, ImageSettings, MedLevel, MedReference, MedPoint)
 VALUES ( 1,  771, '12345-derma-230905142452-1', 'dbo', '12345-derma-230905142452-1', '123546',  23.09.2005, 'Mano destra (palmo)', '','DATABASE                                                        ', '\\DERMASERVER\DATABASE\images0\', 'Medic2_0923051425_FFI_1.jpg', 756, 568, 49228, 'DATABASE ',  '\\dermaserver\database\images0\ ', 756, 568, 49228, '0923051425', '\\dermaserver\database\images0\ ','\\dermaserver\database\icons0\ ', 'Medic2_0923051425_FFS_1.bmp',  86, 64, 6710, '0923051425', 'Medic2_0923051425_FFI_1.jpg','0', 1, 1, 0)
Alle felder sind narchar bzw int nur das Feld "DateofShooting" ist ein datetime
Wenn ich das Datum in Hochkommas setze bekomme ich den Fehler das ich ein char nicht in ein datetime konvertieren kann.

Vielleicht hat ja jemand anders noch eine idee. Ich werde fleißig weitersuchen und eine Lösung (falls ich finde) natürlich posten
 
Hallo

ich glaube ich habe eine akzeptable Lösung für das problem gefunden.

Probier es doch mal so aus:
Code:
INSERT INTO Zeiterfassung_test
    (employee_ID, check_in_date,   
     group_id, shift, Host_Id, status, working_time, pause)
  VALUES
    ('3811', Convert (datetime,  '05.10.2005 11:47:09', 104) ,  
     'MUSTERGRUPPE', '', '', '1', '', '')
Wenn ich es richtig verstanden habe erzwingt der Befehl Convert eine Datenkonvertierung des jeweiligen Wertes in unserem fall halt den Tpy datetime dannach wird der Wert eingetragen, also '05.10.2005 11:47:09'. Der Wert muss immer in Hochkommas angeben werden. Anschließen folgt noch ein Code der angibt welches Datumsformat man verwendet, 104 steht hier für deutsches Format .

Ich hoffe ich konnte dir helfen. Bei mir hat es funktioniert.
Tipp von mir: Ich würde das Feld check_in_date und das Feld check_in_time in ein Feld check_in_date zusammenfassen und nicht getrennt in zwei Felder schreiben. Wenn du check_in_time den Typ datetime zuweißt hast du das Problem das immer das Standart Datum 01.01.1990 mit angegeben wird.

Gruß Isabelle
 
Hi Isabelle,
danke Dir für Deine Hilfe. Dein Vorschlag bringt mich sicherlich weiter. Den Befehl Convert, etc. kannte ich bis jetzt noch nicht. Leider kann ich check_in_time und check_in_date nicht zusammenfassen. Aber ich probier es die nächsten Tage mal aus. Wenn ich es doch irgendwie hin bekomme, poste ich nochmal. Kann aber etwas dauern, da ich momentan wieder an einer anderen Sache dran bin.

Grüße
Daniel
 
Hallo Daniel,
Wenn du die Felder überhaupt nicht zusammenlegen kannst, würde ich es zumin. so machen das man den typ datetime vom Feld check_in_time in den typ nchar umwandeln. Den dann hast du das Problem des standart datums nicht mehr. Vielleicht ist das eine besser lösung
gruß isabelle
 
Hallo,
zunächst eine Frage an Bella_Isy: wie soll man(n) deinen Hinweis deuten? Warnung oder Aufforderung, den Beitrag besonders zu beachten?

Nun zum Thema:
Ich bin weder ein VB- noch Java- Spezialist. Mit MSSQL-Datenbanken arbeite ich schon ein paar Jahre (mehr als 15).
Habe mir auf Grund dieses Artikels eine Tabelle mit Datumsfeldern gebaut und mit dem Query Analizer div. Versuche gemacht, Einträge in versch. Formaten zu machen. Ich habe es nicht geschaft.
Egal wie ich bei Insert die Datum/Zeitangabe formatiert habe, in der Tabelle stand immer das gleiche (sofern dies auf Grund der übergebenen Parameter möglich war).
Wo convert zu Ergebnissen führt, ist beim Lesen der Daten aus der Tabelle. Hier kann alles erzeugt werden (Datum, Zeit, Datum und Zeit). Dies währe sicher eine Möglichkeit, das Problem mit den Formaten bereits beim Lesen aus der Tabelle zu lösen.
Beim Schreiben wird es nicht gehen.
Sollte ich hier irgend etwas nicht kappiert haben, schreibt bitte die Lösung hier her.

PS: wenn ich von jemandem etwas neues lernen kann, ist es mir egal ob von Frau oder Mann (natürlich mit Ausnahmen).
 
Zurück