2010-02-01 4 views

Répondre

0

par exemple.

CAST(CONVERT(VARCHAR(10), date, 120) AS DATETIME) 

Notez que cela ne fera pas bon usage de tout indice sur le champ de date, et ainsi vous pouvez voir de mauvaises performances en particulier avec des volumes de données plus élevés.

alternatives seraient:
- réévaluer ce que vous essayez d'atteindre et comment
- stocker les éléments de date et l'heure du champ dans 2 champs séparés, indexables.

+0

je ne veux pas seulement le changement @idate mais la date –

+0

changent @idate à ce jour, mis à jour. Notez que cela empêche une bonne utilisation de l'index – AdaTheDev

0

Vous ne devez jamais modifier les informations de colonne, sauf si cela est absolument nécessaire. Cela provoque une analyse complète de la table et ignore les index. Assurez-vous simplement que @idate est correct.

1

Il est préférable d'utiliser les balayages de plage. Pourquoi avez-vous besoin de changer la valeur stockée dans la colonne? Si vous voulez trouver tout ce qui est arrivé sur 2009-09-15 (quel que soit le temps), vous pouvez dire:

WHERE [date] >= '20090915' 
AND [date] < '20090916'; 

Maintenant, vous serez toujours en mesure d'utiliser un index sur la colonne [date], si elle existe, ce qui devrait être le cas si vous exécutez des requêtes de ce type souvent. La conversion sur le côté gauche mène à des requêtes non-SARGables qui vont sucer presque unilatéralement les performances.

Un lien utile pour vérifier est l'article de Tibor sur les types de données date/heure, y compris des conseils d'interrogation:

http://www.karaszi.com/SQLServer/info_datetime.asp

J'ai aussi écrit un article assez long à éviter les mauvaises pratiques lors de l'interrogation des plages de dates:

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx

Questions connexes