Laden...

DateTime-Feld nur mit Uhrzeit füllen (ohne Datum)

Letzter Beitrag vor 14 Jahren 11 Posts 5.895 Views
DateTime-Feld nur mit Uhrzeit füllen (ohne Datum)

verwendetes Datenbanksystem: SQL Server Express 2005

Hallo,

ich habe eine Tabelle mit einem Feld Uhrzeit, wo immer eine bestimmte Tageszeit eingetragen werden soll. Das Datum ist völlig unwichtig.
Wenn ich einfach nur eine Uhrzeit in das Feld eintrage, wird trotzdem immer noch ein Datum mit eingetragen. Das ist zwar nicht so dramatisch, aber trotz allem ziemlich hässlich und verbraucht ja nur unnötigen Speicherplatz.
Bei neueren Versionen des SQL Server gibt es ja einen Datentyp "time", den ich aber leider nicht nutzen kann (benutze SQL Server Express 2005).
Eine Lösung wäre, die Anzahl der Minuten seit Mitternacht in ein Integer-Feld einzutragen. Oder eben als String, was natürlich nicht so schön ist wenn man mit der Uhrzeit rechnen möchte.
Fällt euch eine Lösung dazu ein?

Danke im Voraus!

Nimm doch einen UnixTimeStamp und speicher den Wert als LongVariable.
Ist ganz einfach umzurechnen.

Nicht für das Leben, für die Arbeit lernen wir ...
Windows ist Klasse, ich nehme es um Linux zu downloaden ....

Vor 2008, bzw. heute noch teilweise, verwende ich für sowas trotzdem den DATETIME Datentyp. Mit den integrierten Datum/Zeitfunktionen ist das ja alles kein Problem. Irgendwelche wilden umrechnereien kosten doch nur Performance.

Stört dich wirklich nur rein die Anzeige? Und welche Anzeige? Die im SSMSE?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Nimm doch einen UnixTimeStamp und speicher den Wert als LongVariable.
Ist ganz einfach umzurechnen.

Aber ein Unix-Timestamp enthält doch auch das Datum, oder? Dann käme es ja wieder auf das selbe raus...

Khalid: Es ist ein rein kosmetisches Problem und sonst nichts. Also es geht nur um die Anzeige im Management Studio. Ich wollte nur mal wissen wie andere das so handhaben, weil ich diese Lösung nicht ganz optimal finde.

bei mir sehe ich in solchen Fällen 1900.01.01 hh:mm:ss und es stört mich nicht 😁

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

Ich stehe vor dem gleichen Problem,
leider ist es bei mir nicht nur rein kosmetischer Natur.

In einer von extern vorgegebenen Access Db gibt es eine Tabelle
mit einem DateTime Feld.
In dieses Feld darf aber nur die Uhrzeit geschrieben werden.

Ich habe schon folgendes ohne Erfolg probiert:


string zeit = "11:29:00";

row.Zeit = DateTime.Parse(zeit);
row.Zeit = DateTime.ParseExact(zeit, "HHmmss", enUS);

// in die Db wird 08.12.2009 11:29:00 geschrieben


In beiden Fällen wird aber auch das Datum mit in die Db geschrieben 🙁

Komischerweise gibt es für den umgekehrten Fall (DateTime Feld mit nur Date)
eine ganz einfache Lösung -> DateTime.Date 🤔

Es komtm doch auf den Datentyp an. Wenn der auch Datumswerte aufnimmt, steht immer ein Datum drin. Evtl. wird es nur ausgeblendet, wenn es einen bestimmten Wert besitzt. Andernfalls (der Spaltentyp ist nur Zeit) würde kein Datum geschrieben. Komische anforderung finde ich...

Welche SQL Server Version setzt ihr ein? Unter 2008 gibt es die neuen Datentypen DATE und TIME.

Allerdings verstehe ich so ein Problem nie 🤔
Was in der DB steht, sind doch nur die reinen Daten. Nur die UI muss sich um die Anzeige kümmern. Wenn in der DB das Datum mit abgespeichert wird, verbrate ich halt ein paar Bytes mehr. Na und? Die UI muss ja nur die Uhrzeit anzeigen.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Welche SQL Server Version setzt ihr ein? Unter 2008 gibt es die neuen Datentypen DATE und TIME.

Wie in meiner Frage genannt, handelt es sich (leider) um eine Access DB.

Allerdings verstehe ich so ein Problem nie 👶
Was in der DB steht, sind doch nur die reinen Daten. Nur die UI muss sich um die Anzeige kümmern. Wenn in der DB das Datum mit abgespeichert wird, verbrate ich halt ein paar Bytes mehr. Na und? Die UI muss ja nur die Uhrzeit anzeigen.

Meine Anwendung ist im Endeffekt nur zum Füllen der DB da,
die Werte müssen von mir auch entsprechend richtig eingegeben werden.
Über das (teilweise zu ersetzende) Access Frontend lassen sich auch Datensätze eingeben, die dann im DateTime Feld nur eine Zeit stehen haben.

Ist schon richtig, aber das Anzeigeformat sollte trotzdem im Frontend eingestellt werden. Wenn die Datenspalte an sich Datumswerte aufnimmt, wirst du keine Chance haben. Außer wie gesagt mit einem Standardwert ... das weiß ich nicht wies in Access ist.

Die Daten werden halt nicht nur angezeigt, sondern auch von einer milde ausgedrückt langen Funktion im Access Frontend in ein Text File geschrieben.
Dort stand eben statt 00:00:20 ein "volles" DateTime, z.B. 13.12.2009 00:00:20.

Inzwischen habe ich allerdings eine Lösung gefunden.


int year = 1;
int month = 1;
int day = 1;
int hours = 0;
int seconds = 2;
int minutes = 3;

row.Zeit = new DateTime(year, month, day, hours, minutes, seconds;

Im entsprechenden Feld der Db steht dann nur wie gewünscht 00:03:02,
d.h. der Datumsanteil mit 1,1,1 wird anscheinend als Defaultwert betrachtet und somit
nicht als Wert in das Feld geschrieben.