sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo convertir la columna de marca de tiempo de SQL Server al formato de fecha y hora

TIMESTAMP de SQL Server el tipo de datos tiene nada que ver con una fecha y hora!

Es solo una representación hexadecimal de un entero de 8 bytes consecutivos; solo sirve para asegurarse de que una fila no haya cambiado desde que se leyó.

Puede leer el entero hexadecimal o si desea un BIGINT . Como ejemplo:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

El resultado es

400756068

En las versiones más nuevas de SQL Server, se llama RowVersion - ya que eso es realmente lo que es. Consulte los documentos de MSDN en ROWVERSION:

Es un tipo de datos que expone números binarios únicos generados automáticamente dentro de una base de datos. La versión de fila generalmente se usa como un mecanismo para las filas de la tabla de marca de versión. El tipo de datos de la versión de fila es solo un número incremental y no conserva una fecha ni una hora . Para registrar una fecha o una hora, utilice un tipo de datos datetime2.

Entonces no puedes convertir un SQL Server TIMESTAMP a una fecha/hora - simplemente no es una fecha/hora.

Pero si estás diciendo marca de tiempo pero en realidad te refieres a un DATETIME columna:puede usar cualquiera de los formatos de fecha válidos descritos en el tema CAST y CONVERT en la ayuda de MSDN. Estos están definidos y admitidos "listos para usar" por SQL Server. Cualquier otra cosa no es compatible, p. tienes que hacer muchas conversiones y concatenaciones manuales (no recomendado).

El formato que está buscando se parece un poco al canónico ODBC (estilo =121):

DECLARE @today DATETIME = SYSDATETIME()

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

da:

2011-11-14 10:29:00.470

SQL Server 2012 finalmente tendrá un FORMAT función para hacer formato personalizado......