2011-11-14 2 views

Répondre

185

TIMESTAMP SQL Server de type de données a rien à voir avec une date et l'heure! Il s'agit simplement d'une représentation binaire d'un nombre consécutif - c'est seulement bon pour s'assurer qu'une rangée n'a pas changé depuis qu'elle a été lue.

Dans les versions plus récentes de SQL Server, il s'appelle RowVersion - puisque c'est vraiment ce qu'il est. Voir la MSDN docs on ROWVERSION:

est un type de données qui expose générés automatiquement, nombres binaires uniques dans une base de données. rowversion est généralement utilisé comme mécanisme pour les lignes de table d'estampillage de version. Le type de données rowversion est juste un nombre croissant et ne conserve pas une date ou une heure. Pour enregistrer une date ou une heure, utilisez un type de données datetime2 .

Vous ne peut pas convertir un SQL Server TIMESTAMP à une date/heure - il est tout simplement pas une date/heure.

Mais si vous dites timestamp mais que vous voulez vraiment dire une colonne DATETIME - alors vous pouvez utiliser l'un de ces formats de date valides décrits dans la rubrique CAST and CONVERT dans l'aide MSDN. Ceux-ci sont définis et pris en charge "out of the box" par SQL Server. Tout le reste n'est pas pris en charge, par ex. vous devez faire beaucoup de coulée manuelle et de concaténation (non recommandé).

Le format que vous cherchez ressemble un peu à l' canonique ODBC (style = 121):

DECLARE @today DATETIME = SYSDATETIME() 

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

donne:

2011-11-14 10:29:00.470 

SQL Server 2012 will finally have a FORMAT function faire le formatage personnalisé ...

+1

Probablement ma plus grosse bêtise avec SQL Server. Pourquoi l'appeler un horodateur si je ne peux pas dire l'heure avec elle? – BelgoCanadian

+0

@BelgoCanadian: demander à Sybase - c'est une fonctionnalité qui a été dans Sybase/SQL Server pour toujours ..... –

2

Mes collègues m'ont aidé avec ceci:

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

ou

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

fonctionne très bien, sauf ce message:

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

Alors oui, timestamp (RowVersion) est pas une DATE :)

Pour être honnête, je fidddled autour un certain temps moi-même de trouver un moyen de le convertir en Un rendez-vous.

Le meilleur moyen est de le convertir en INT et de comparer. C'est ce que ce type est censé être. Si vous voulez une date - il suffit d'ajouter une ligne Datetime et vivre happyly jamais après :)

hourras mac

0

pourquoi ne pas essayer FROM_UNIXTIME (unix_timestamp, format)

+10

Parce que cette question fait référence à SQL de Microsoft, pas à MySQL. –

2

Certains d'entre eux ne fait secret à un date et heure de SQL Server 2008 et suivantes.

Essayez la requête SQL suivante et vous verrez par vous-même:

select CAST (0x00009CEF00A25634 as datetime) 

Le plus va entraîner 2009-12-30 09: 51: 03: 000, mais j'ai rencontré ceux qui ne le font pas en fait carte à une date-heure.

5

vous rejetterai pouvez Utilisation obtenir la date à partir d'un champ d'horodatage:

SELECT CAST(timestamp_field AS DATE) FROM tbl_name 
+2

Cela ne semble pas fonctionner: 'La conversion explicite de l'horodatage de type de données à ce jour n'est pas autorisée. ' – jocull

-2

Je ne sais pas si je manque quelque chose ici, mais tu ne peux pas convertir l'horodatage comme ceci:

CONVERT(VARCHAR,CAST(ZEIT AS DATETIME), 110) 
+0

Avez-vous essayé? TIMESTAMP n'a aucun lien avec DATE. –

+0

Je l'utilise sur SQL Server 2008 – Daniel

2

La manière la plus simple de le faire est:

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

Ceci donne au moins la colonne de date dans un format lisible . Si vous souhaitez modifier le format, cliquez sur here.

+0

semble pas pour les anciennes versions de SQL? Je ne peux pas le trouver avec sql 2014 .. – pungggi

Questions connexes