Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come convertire la colonna timestamp di SQL Server in formato datetime

TIMESTAMP di SQL Server tipo di dati non ha niente a che fare con una data e un'ora!

È solo una rappresentazione esadecimale di un intero consecutivo di 8 byte:è utile solo per assicurarsi che una riga non sia cambiata da quando è stata letta.

Puoi leggere l'intero esadecimale o se vuoi un BIGINT . Ad esempio:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Il risultato è

400756068

Nelle versioni più recenti di SQL Server, viene chiamato RowVersion - poiché è proprio così. Consulta i documenti MSDN su ROWVERSION:

È un tipo di dati che espone numeri binari univoci generati automaticamente all'interno di un database. rowversion è generalmente usato come meccanismo per le righe della tabella di timbratura della versione. Il tipo di dati della versione riga è solo un numero incrementale e non conserva una data o un'ora . Per registrare una data o un'ora, usa un tipo di dati datetime2.

Quindi non puoi convertire un TIMESTAMP di SQL Server a una data/ora:semplicemente non è una data/ora.

Ma se stai dicendo timestamp ma in realtà intendi un DATETIME colonna:è possibile utilizzare uno qualsiasi di quei formati di data validi descritti nell'argomento CAST e CONVERT nella Guida di MSDN. Questi sono definiti e supportati "out of the box" da SQL Server. Qualsiasi altra cosa non è supportata, ad es. devi eseguire molti casting e concatenamenti manuali (non consigliato).

Il formato che stai cercando assomiglia un po' al canonico ODBC (stile =121):

DECLARE @today DATETIME = SYSDATETIME()

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

dà:

2011-11-14 10:29:00.470

SQL Server 2012 avrà finalmente un FORMAT funzione per eseguire la formattazione personalizzata......