Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So konvertieren Sie die Timestamp-Spalte von SQL Server in das Datetime-Format

TIMESTAMP von SQL Server Datentyp hat nichts mit Datum und Uhrzeit zu tun!

Es ist nur eine hexadezimale Darstellung einer fortlaufenden 8-Byte-Ganzzahl - es ist nur gut, um sicherzustellen, dass sich eine Zeile nicht geändert hat, seit sie gelesen wurde.

Sie können die hexadezimale Ganzzahl ablesen oder wenn Sie möchten, ein BIGINT . Als Beispiel:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Das Ergebnis ist

400756068

In neueren Versionen von SQL Server heißt es RowVersion - denn das ist es wirklich. Siehe die MSDN-Dokumentation auf ROWVERSION:

Ist ein Datentyp, der automatisch generierte, eindeutige Binärzahlen innerhalb einer Datenbank verfügbar macht. rowversion wird im Allgemeinen als Mechanismus zum Versehen von Tabellenzeilen mit Versionsstempeln verwendet. Der Datentyp der Zeilenversion ist nur eine aufsteigende Zahl und behält weder ein Datum noch eine Uhrzeit bei . Um ein Datum oder eine Uhrzeit aufzuzeichnen, verwenden Sie einen datetime2data-Typ.

Sie können also nicht Konvertieren Sie einen SQL Server TIMESTAMP zu einem Datum/einer Uhrzeit - es ist einfach kein Datum/keine Uhrzeit.

Aber wenn Sie Zeitstempel sagen, meinen Sie wirklich ein DATETIME -Spalte - dann 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. Sie müssen viel manuelles Casting und Verketten durchführen (nicht empfohlen).

Das Format, nach dem Sie suchen, sieht ein bisschen wie das ODBC Canonical aus (Stil =121):

DECLARE @today DATETIME = SYSDATETIME()

SELECT CONVERT(VARCHAR(50), @today, 121)

ergibt:

2011-11-14 10:29:00.470

SQL Server 2012 wird endlich ein FORMAT haben Funktion zur benutzerdefinierten Formatierung......