Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Δέκατα Δευτερολέπτου σε datetime πεδίο

Îåêßíçóå áðü ôï ìÝëïò antonisV. Τελευταία δημοσίευση από το μέλος antonisV στις 09-12-2009, 17:29. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-12-2009, 16:02 55800

    Δέκατα Δευτερολέπτου σε datetime πεδίο

    Καλησπέρα,

    Θα μπορούσε κάποιος να με πληροφορήσει ανυπάρχει τρόπος να κάνει κανείς τον SQL Server 2005 να μην καταχωρεί δέκατα του δευτερολέπτου σε πεδίο datetime;
    To SmallDatetime δεν με καλύπτει καθώς θέλω την ακρίβεια του δευετερολέπτου.
    Έχω ψάξει αρκετά, αλλά δεν έχω βρει κάτι.

    Ευχαριστώ
    antonisV
  •  09-12-2009, 16:51 55802 σε απάντηση της 55800

    Απ: Δέκατα Δευτερολέπτου σε datetime πεδίο

    Τί εννοείς "να μην καταχωρεί"? Έχεις μία τιμή η οποία έχει δέκατα και θέλεις να τα κόψεις? Γιατί δεν το κάνεις αυτό στον κώδικα που δημιουργεί το datetime?

    Ο SQL Server 2005 δεν επιτρέπει να ορίσεις ακρίβεια στον τύπο datetime. Αυτό γίνεται στον τύπο datetime2 του SQL Server 2008 ο οποίος σου επιτρέπει να ορίσεις πόσα δεκαδικά θα κρατάει για τα δευτερόλεπτα.

    Στον SQL Server 2005 θα πρέπει να χρησιμοποιήσεις διάφορα κόλπα για να πετύχεις αυτό πού θέλεις.

    • Το απλούστερο είναι να περιορίζεις τα δεκαδικά στον κώδικα
    • Μπορείς να βάλεις ένα INSTEAD OF trigger στον πίνακα το οποίο θα κόβει τα δεκαδικά. Είναι φασαρία, ειδικά επειδή η TSQL δεν σου δίνει κάποιο καλό τρόπο να χειριστείς τα δευτερόλεπτα. Θα πρέπει να σπάσεις την ημερομηνία με την DATEPART και να την ξαναφτιάξεις μόνο μέχρι το επίπεδο του δευτερολέπτου.
    • Αν η ώρα μπαίνει μέσω της GETDATE() ως default value μπορείς να φτιάξεις ένα δικό σου function το οποίο θα σπάει την ημερομηνία όπως παραπάνω και να το χρησιμοποιήσεις αντί για την GetDate().
      Το ίδιο μπορείς να κάνεις αν η ώρα μπαίνει μέσω κάποιου stored procedure

    Αν βέβαια μπορείς να πεις ότι θα χρησιμοποιήσεις SQL Server 2008, τα προβλήματα λύνονται αμέσως


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-12-2009, 17:29 55806 σε απάντηση της 55802

    Απ: Δέκατα Δευτερολέπτου σε datetime πεδίο

    Παναγιώτη,

    Σε ευχαριστώ πολύ για την απάντηση.

    Διάλεξα την 3η λύση γιατί:

    1. Δυστυχώς δεν μπορώ να αλλάξω κώδικα δεκαετιών που ηταν φτιαγμένος αποκλειστικά για Oracle χρησιμοποιώντας σε κλειδιά DateTime !!! με ό,τι αυτό συνεπάγεται με τα δέκατα του δευτερολέπτου στα joins.
    2. Οι πίνακες είναι πάρα πολλοί για triggers και σε κάποιους υπάρχουν ήδη άλλοι, άρα ως γνωστόν θα πρέπει να ενωποιούμε triggers μιας και δέχεται μόνο 1 INSTEAD
    3. Δεν μπορώ να πείσω τη διοίκηση να πείσει τους πελάτες να κάνουν upgrade σε SQL Server 2008.

    Έχω ήδη δώσει τη συνάρτηση προς testing. Αν όλα πάνε καλά θα την αναρτήσω μπας και τι χρειαστεί και κάνας άλλος.

    antonisV
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems