2008-09-17 5 views
3

Scénario: Une procédure stockée reçoit du code DateTime avec, disons DateTime.Now, un paramètre datetime. La procédure stockée doit stocker uniquement la partie date du datetime sur la ligne, mais conserve toutes les arithmétiques liées à la date pour, par exemple, effectuer des recherches sur des intervalles de temps et effectuer des rapports basés sur des dates.La meilleure façon de stocker seulement la date sur le champ datetime?

Je sais qu'il y a plusieurs façons de faire, mais quelle est la meilleure chose à faire en termes de performance et de gaspillage d'espace?

+0

Pourriez-vous s'il vous plaît laissez-nous savoir quelle base de données vous utilisez? – Brettski

+0

Désolé, c'est SQL Server 2005, le tag est tsql, pensé que ce serait suffisant> _ < –

Répondre

4

La logique métier doit être gérée en dehors du processus. Les tâches de procs doivent consister à enregistrer les données qui lui sont transmises. Si le requirment doit seulement stocker Date et pas l'heure, alors le BL/DL devrait passer dans DateTime.Now **. Date ** (ou l'équivalent ... fondamentalement la partie Date de votre objet DateTime).

Si vous ne pouvez pas contrôler le code pour une raison quelconque, il y a toujours convertir (varchar (10), @YOURDATETIME, 101)

+0

Je peux ajouter que cela a fonctionné sur mon code de production. Sur VbNet, j'ai réussi à modifier tous les setters avec le type DateTime pour recevoir seulement la date en disant "_variable = value.Date" et à partir de ce moment, il a propagé à la base de données dans les deux sens avec élégance. Merci! –

0

stocker la date avec le temps = minuit

EDIT: Je présume que MS SQL Server

+0

Il est, il est étiqueté tsql. Merci d'avoir répondu. –

0

Essentiellement, vous allez seulement pour stocker la partie Date de votre objet DateTime. Cela signifie que, quelle que soit la manière dont vous souhaitez traiter les données, la date renvoyée sera toujours définie sur 00:00:00.

Les fonctions liées au temps sont inutiles dans ce scénario (même si votre objet DateTime d'origine les utilise) lorsque votre base de données supprime cette information.

L'arithmétique liée à la date s'appliquera toujours, bien que vous deviez supposer une heure minuit pour chaque date renvoyée par la base de données.

0

Si vous travaillez sur Oracle, à l'intérieur de votre procédure stockée utilisez la fonction TRUNC sur le datetime. Cela renverra UNIQUEMENT la partie date.

Questions connexes