Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment convertir la colonne d'horodatage de SQL Server au format datetime

TIMESTAMP de SQL Server le type de données n'a rien à voir avec une date et une heure !

C'est juste une représentation hexadécimale d'un entier consécutif de 8 octets - c'est seulement bon pour s'assurer qu'une ligne n'a pas changé depuis qu'elle a été lue.

Vous pouvez lire l'entier hexadécimal ou si vous voulez un BIGINT . Par exemple :

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Le résultat est

400756068

Dans les nouvelles versions de SQL Server, il s'appelle RowVersion - puisque c'est vraiment ce que c'est. Consultez la documentation MSDN sur ROWVERSION :

Est un type de données qui expose des nombres binaires uniques générés automatiquement dans une base de données. rowversion est généralement utilisé comme mécanisme d'horodatage des lignes de table. Le type de données rowversion est juste un nombre incrémentiel et ne conserve ni date ni heure . Pour enregistrer une date ou une heure, utilisez un type datetime2data.

Donc, vous ne pouvez pas convertir un SQL Server TIMESTAMP à une date/heure - ce n'est tout simplement pas une date/heure.

Mais si vous dites horodatage mais que vous voulez vraiment dire un DATETIME colonne - vous pouvez alors utiliser n'importe lequel de ces formats de date valides décrits dans la rubrique CAST et CONVERT de l'aide MSDN. Ceux-ci sont définis et pris en charge "prêts à l'emploi" par SQL Server. Tout le reste n'est pas pris en charge, par ex. vous devez faire beaucoup de casting et de concaténation manuels (non recommandé).

Le format que vous recherchez ressemble un peu au format ODBC canonique (style =121):

DECLARE @today DATETIME = SYSDATETIME()

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

donne :

2011-11-14 10:29:00.470

SQL Server 2012 aura enfin un FORMAT fonction pour faire un formatage personnalisé......