Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Conserver la date ou l’heure d’un datetime (Comparaison des méthodes v2)

Je relance un vieux billet (http://blogs.codes-sources.com/christian/archive/2007/04/29/sql-server-conserver-la-date-ou-l-heure-d-un-datetime-comparaison-des-methodes.aspx) sur le traitement des dates, essentiellement pour remettre ce banc d'essai à jour et ajouter les conversions spécifiques à SQL Server 2008.

La procédure de test vise à créer une table :

CREATE TABLE DateTable (X datetime)
GO

La remplir à 20 millions de lignes :

DECLARE @base_dte datetime ;
SET
@base_dte = '19000101' ;
DECLARE
@I int ;
SET
@I = 20000000 ;

WHILE (@I > 0)

BEGIN

    INSERT DateTable VALUES(DATEADD(MINUTE, @I, @base_dte))

    SET @I = @I - 1 ;

END

Et tester avec les différentes commandes :

DECLARE @d datetime ;

SET STATISTICS TIME ON


-- Les méthodes suivantes ne conservent que la composante heure


-- Se valent globalement toutes

SELECT @d = cast(cast(X as binary(4)) as datetime) FROM DateTable -- 5.5 sec

SELECT @d = X-datediff(day, 0, X) FROM DateTable -- 5.3 sec

SELECT @d = X-cast(cast(X as float) as int) FROM DateTable -- 5.2 sec


-- 2008 uniquement

SELECT @d = cast(X as time) FROM DateTable -- 4.7


-- Les méthodes suivantes ne conservent que la composante date


-- Lentes et à déconseiller

SELECT @d = CONVERT(datetime, CONVERT(char(10), X, 103), 103) FROM dbo.DateTable -- 17 sec

SELECT @d = DATEADD(d, 0, FLOOR(CAST(X as float))) FROM dbo.DateTable -- 7 sec

SELECT @d = CAST(FLOOR(CAST(X as float)) as datetime) FROM dbo.DateTable -- 5.6 sec


-- TOP 4 -- Ces méthodes se valent dans la mesure où l'écart entre elle est faible !

SELECT @d = CAST(CAST(CAST(X as float) as int) as datetime) FROM dbo.DateTable -- 4.7 sec

SELECT @d = cast(cast(cast(X as float) as int) as datetime) FROM DateTable -- 4.7 sec

SELECT @d = cast(datediff(day,0,X) as datetime) FROM DateTable -- 4.5 sec


-- 2008 uniquement

SELECT @d = CAST(X as date) FROM dbo.DateTable -- 4.3 sec


-- Les conversions qui suivent ne fonctionnent pas à cause de l'arrondi

-- A noter quand même que la dernière est plus rapide que le CAST as Date ???

SELECT @d = DATEADD(d, 0, CAST(X as int)) FROM dbo.DateTable -- 6.2 sec

SELECT @d = CAST(CAST(X as int) as datetime) FROM dbo.DateTable -- 4.1 sec


Je mets le résultat dans une variable, histoire de purement et simplement ne pas avoir à les afficher… ce qui donnerait un curseur client et ralentirait inutilement la requête. De plus j'exécute toujours 2 fois les commande, histoire de ne pas à prendre en compte le temps de compilation et vérifier que le temps est bien identique.

Dernier point le temps retenu est le temps consommé par le processeur, mesuré par SET STATISTICS TIME !

Les grands vainqueur si on en doutait encore sont les CAST(X AS DATE) et CAST(X AS TIME) nouveaux venus sous SQL Server 2008 ! Et ils sont tellement plus simples à utiliser !!!

Merci à la personne ayant mis en commentaires dans le précédent billet certaines de ces commandes, qui s'avèrent marcher pas mal J

Bons tests…

 

 

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié jeudi 10 décembre 2009 08:36 par christian

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01