Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como converter a coluna de carimbo de data/hora do SQL Server para o formato de data/hora


TIMESTAMP do SQL Server tipo de dados tem nada a ver com uma data e hora!

É apenas uma representação hexadecimal de um inteiro consecutivo de 8 bytes - é bom apenas para garantir que uma linha não seja alterada desde que foi lida.

Você pode ler o inteiro hexadecimal ou se quiser um BIGINT . Como um exemplo:
SELECT CAST (0x0000000017E30D64 AS BIGINT)

O resultado é
400756068

Nas versões mais recentes do SQL Server, está sendo chamado de RowVersion - já que isso é realmente o que é. Veja os documentos do MSDN em ROWVERSION:

É um tipo de dados que expõe números binários exclusivos gerados automaticamente em um banco de dados. rowversion é geralmente usado como um mecanismo para linhas de tabela de registro de versão. O tipo de dadosrowversion é apenas um número incremental e não preserva uma data ou hora . Para gravar uma data ou hora, use um tipo datetime2data.

Então você não pode converter um SQL Server TIMESTAMP para uma data/hora - não é apenas uma data/hora.

Mas se você está dizendo timestamp, mas na verdade você quer dizer um DATETIME coluna - então você pode usar qualquer um desses formatos de data válidos descritos no tópico CAST e CONVERT na ajuda do MSDN. Esses são definidos e suportados "fora da caixa" pelo SQL Server. Qualquer outra coisa não é suportada, por exemplo. você tem que fazer muita conversão e concatenação manual (não recomendado).

O formato que você está procurando se parece um pouco com o ODBC canônico (estilo =121):
DECLARE @today DATETIME = SYSDATETIME()

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

dá:
2011-11-14 10:29:00.470

O SQL Server 2012 finalmente terá um FORMAT função para fazer formatação personalizada......