Der TIMESTAMP
Datentyp von SQL Server hat nichts mit Datum und Uhrzeit zu tun!
Es ist nur eine hexadezimale Darstellung einer aufeinanderfolgenden 8-Byte-Ganzzahl - es ist nur gut, um sicherzustellen, dass sich eine Zeile seit dem Lesen nicht geändert hat.
Sie können die hexadezimale Ganzzahl ablesen oder wenn Sie eine möchten BIGINT
. Als Beispiel:
SELECT CAST (0x0000000017E30D64 AS BIGINT)
Das Ergebnis ist
400756068
In neueren Versionen von SQL Server wird es aufgerufen RowVersion
- da es wirklich so ist. Siehe die MSDN-Dokumente zu ROWVERSION :
Ist ein Datentyp, der automatisch generierte, eindeutige Binärzahlen in einer Datenbank verfügbar macht. Die Zeilenversion wird im Allgemeinen als Mechanismus zum Versionsstempeln von Tabellenzeilen verwendet. Der Zeilenversionsdatentyp ist nur eine inkrementelle Zahl und behält weder ein Datum noch eine Uhrzeit bei . Verwenden Sie zum Aufzeichnen eines Datums oder einer Uhrzeit einen Datetime2-Datentyp.
Sie können einen SQL Server also nicht TIMESTAMP
in ein Datum / eine Uhrzeit konvertieren - es ist einfach kein Datum / keine Uhrzeit.
Wenn Sie jedoch Zeitstempel sagen, aber wirklich eine DATETIME
Spalte meinen , können Sie eines der gültigen Datumsformate verwenden, die im Thema CAST und CONVERT in der MSDN-Hilfe beschrieben sind. Diese werden von SQL Server "out of the box" definiert und unterstützt. Alles andere wird nicht unterstützt, z. B. müssen Sie viel manuell gießen und verketten (nicht empfohlen).
Das Format, nach dem Sie suchen, ähnelt ein bisschen dem ODBC-Kanon (style = 121):
DECLARE @today DATETIME = SYSDATETIME()
SELECT CONVERT(VARCHAR(50), @today, 121)
gibt:
2011-11-14 10:29:00.470
SQL Server 2012 wird endlich eine FORMAT
Funktion zum benutzerdefinierten Formatieren haben ......
TIMESTAMP
Typ SpaltenDer einfachste Weg, dies zu tun, ist:
Dies gibt die Datumsspalte mindestens in einem lesbaren Format. Wenn Sie das Format ändern möchten, klicken Sie hier .
quelle
Mit cast können Sie das Datum aus einem Zeitstempelfeld abrufen:
quelle
Explicit conversion from data type timestamp to date is not allowed.
Meine Mitarbeiter haben mir dabei geholfen:
oder
quelle
Funktioniert gut, außer dieser Nachricht:
Also ja,
TIMESTAMP
(RowVersion
) ist KEIN DATUM :)Um ehrlich zu sein, habe ich einige Zeit selbst herumgespielt, um einen Weg zu finden, es in ein Datum umzuwandeln.
Der beste Weg ist, es zu konvertieren
INT
und zu vergleichen. So soll dieser Typ sein.Wenn du ein Date haben willst - füge einfach eine
Datetime
Spalte hinzu und lebe glücklich bis ans Ende :)Prost Mac
quelle
"Du benutzt dieses Wort weiter. Ich glaube nicht, dass es bedeutet, was du denkst, dass es bedeutet." - Inigo Montoya
Der Zeitstempel hat absolut keine Beziehung zur Zeit, wie marc_s ursprünglich sagte.
Beachten Sie in der Ausgabe, dass Ts (hex) für jeden Datensatz um eins erhöht wird, die tatsächliche Zeit jedoch eine Lücke von 10 Sekunden aufweist. Wenn es sich auf die Zeit beziehen würde, würde es eine Lücke im Zeitstempel geben, die der Zeitdifferenz entspricht.
quelle
Nach der Beschleunigung der Konvertierung in eine Ganzzahl CONVERT (BIGINT, [Zeitstempel]) als Zeitstempel habe ich das Ergebnis wie folgt
Ja, dies ist kein Datum und keine Uhrzeit. Es sind Seriennummern
quelle
für mich funktioniert: TO_DATE ('19700101', 'yyyymmdd') + (TIME / 24/60/60) (oracle DB)
quelle
Ich hatte das gleiche Problem mit dem Zeitstempel, z. B.: '29 -JUL-20 04.46.42.000000000 PM '. Ich wollte es in das Format 'JJJJ-MM-TT' verwandeln. Die Lösung, die endlich für mich funktioniert, ist
SELECT TO_CHAR (mytimestamp, 'JJJJ-MM-TT') FROM mytable;
quelle
Einige von ihnen sind ab SQL Server 2008 tatsächlich auf ein Datum und eine Uhrzeit verdeckt .
Probieren Sie die folgende SQL-Abfrage aus und Sie werden es selbst sehen:
Das Obige führt dazu,
2009-12-30 09:51:03:000
aber ich bin auf solche gestoßen, die eigentlich keiner Datums- und Uhrzeitzuordnung zugeordnet sind.quelle
Warum nicht versuchen
FROM_UNIXTIME(unix_timestamp, format)
?quelle
Ich bin mir nicht sicher, ob mir hier etwas fehlt, aber können Sie den Zeitstempel nicht einfach so konvertieren:
quelle