105 votes

Comment convertir la colonne d'horodatage du serveur SQL en format de temps.

Comme le serveur SQL renvoie l'horodatage comme 'Nov 14 2011 03:12:12:947PM' existe-t-il un moyen simple de convertir une chaîne de caractères en un format de date tel que 'Y-m-d H:i:s'.

Jusqu'à présent, j'ai utilisé

date('Y-m-d H:i:s',strtotime('Nov 14 2011 03:12:12:947PM'))

275voto

marc_s Points 321990

La fonction TIMESTAMP Le type de données a rien à faire avec une date et une heure !

Il s'agit simplement d'une représentation hexadécimale d'un nombre entier consécutif de 8 octets. Il n'est utile que pour s'assurer qu'une ligne n'a pas changé depuis sa lecture.

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

SELECT CAST (0x0000000017E30D64 AS BIGINT)

Le résultat est

400756068

Dans les nouvelles versions de SQL Server, il est appelé RowVersion - puisque c'est vraiment ce que c'est. Voir le Documents MSDN sur la ROWVERSION :

Il s'agit d'un type de données qui expose des nombres binaires uniques, générés automatiquement, dans une base de données. La version de rangée est généralement utilisée comme un mécanisme de gestion des données. de marquage de la version des lignes de la table. Le type de données rowversion est un type de données juste un nombre incrémentiel et ne conserver une date ou une heure . Pour enregistrer une date ou une heure, utilisez un type de données datetime2 type de données.

Alors vous ne peut pas convertir un serveur SQL TIMESTAMP à une date/heure - ce n'est tout simplement pas une date/heure.

Mais si vous dites timestamp mais qu'en réalité vous voulez dire un DATETIME vous pouvez alors utiliser n'importe lequel des formats de date valides décrits dans la rubrique CAST et CONVERT dans l'aide MSDN. Ces éléments sont définis et pris en charge par SQL Server dès le départ. Tout autre élément n'est pas pris en charge, par exemple, vous devez effectuer manuellement de nombreux moulages et concaténations (ce qui n'est pas 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 disposera enfin d'une FORMAT fonction pour faire un formatage personnalisé......

11 votes

C'est probablement mon plus gros problème avec SQL Server. Pourquoi appeler cela un timestamp si je ne peux pas lire l'heure avec ?

1 votes

@BelgoCanadian : demandez à Sybase - c'est une fonctionnalité qui existe depuis toujours dans Sybase/SQL Server .....

1 votes

@BelgoCanadian Vous devriez être heureux de savoir qu'il s'appelle maintenant rowversion. docs.microsoft.com/fr/us/sql/t-sql/data-types/

10voto

Sudeep nayak Points 184

La façon la plus simple de procéder est la suivante :

SELECT id,name,FROM_UNIXTIME(registration_date) FROM `tbl_registration`;

Cela donne la colonne de date au moins dans un format lisible. Si vous voulez changer le format, cliquez sur aquí .

5voto

user2588755 Points 1

En utilisant le cast, vous pouvez obtenir une date à partir d'un champ d'horodatage :

SELECT CAST(timestamp_field AS DATE) FROM tbl_name

4voto

Jadwiga Points 29

Mes collègues de travail m'ont aidé :

select CONVERT(VARCHAR(10), <tms_column>, 112), count(*)
from table where <tms_column> > '2012-09-10'
group by CONVERT(VARCHAR(10), <tms_column>, 112);

o

select CONVERT(DATE, <tms_column>, 112), count(*)
from table where <tms_column> > '2012-09-10'
group by CONVERT(DATE, <tms_column>, 112);

4voto

Mac Points 39

Fonctionne bien, sauf ce message :

La conversion implicite du type de données varchar en timestamp n'est pas autorisée. Utilisez la fonction CONVERT pour exécuter cette requête

Alors oui, TIMESTAMP ( RowVersion ) est NO un DATE :)

Pour être honnête, j'ai moi-même bricolé un certain temps pour trouver un moyen de le convertir en date.

Le meilleur moyen est de le convertir en INT et comparer. C'est ce que ce type est censé être.

Si vous voulez une date - il suffit d'ajouter un Datetime colonne et vivre heureux pour toujours :)

Merci, Mac

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X