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

 

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

μετατροπή απο Varchar σε Datetime including ms

Îåêßíçóå áðü ôï ìÝëïò SetN=asxetos.... Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 22-01-2008, 11:46. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-01-2008, 11:17 39227

    μετατροπή απο Varchar σε Datetime including ms

    Γεια σας,είδα αρκετα posts πάνω στο θέμα αλλα κανένα δεν με βοήθησε. Λοιπόν το πρόβλημα είναι το εξής...

    Έχω το εξής φορμάτ DD/MM/YYY HH:MM:SS σε Varchar θέλω να το μετατρέψω σε Datetime με φορματ YYY-MM-DD HH:MM:SS.Ms.

    Είχα φτιάξει την εξής συνάρτηση

    CREATE FUNCTION [dbo].[udf_Convert2DateTime] ( @pInputDate VARCHAR(50) )

    RETURNS DATETIME

    Begin

    Declare @middleStep varchar(50)
    Set @middleStep = '20'+SubString(@pInputDate,7,2)+SubString(@pInputDate,4,2)+SubString(@pInputDate,1,2) +(substring(@pInputDate,10,8))

    end

    αλλα οταν την εκτελώ εμφανίζει μύνημα λάθους cannot convert to datetime from string, όταν βγάζω τo τελευταίο substring δουλεύει αλλα στο φορματ της ημερομηνίας η ώρα εμφανίζεται παντού ως 00:00:00.000

  •  16-01-2008, 11:38 39230 σε απάντηση της 39227

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Μήπως ξέχασες κάτι? Δεν βλέπω πουθενά να κάνεις μετατροπή σε datetime, ενώ το format που δίνεις έχει μόνο 3 χαρακτήρες για το έτος. Είναι σωστό αυτό?

    Επίσης, το DateTime δεν έχει format. Εσωτερικά μάλιστα αποθηκεύεται ως ένα double όπου το ακέραιο μέρος είναι η ημερομηνία και το δεκαδικό η ώρα. Όταν κάνεις ένα select το εργαλείο που χρησιμοποιείς, είτε είναι το Management Studio, το Visual Studio ή κάτι άλλο το μετατρέπει σε κάποιο string με δικό του format για να μπορέσει να στο δείξει. Τα εργαλεία της Microsoft λαμβάνουν υπόψη τα settings του SQL Server, του λειτουργικού σου και του connection. Άλλα εργαλεία μπορεί να το δείχνουν πάντα με ένα συγκεκριμμένο format.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  16-01-2008, 11:43 39231 σε απάντηση της 39230

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Sorry 4 ειναι οι χαρακτήρες για το έτος. Η μετατροπή σε Datetime γίνεται απο την συνάρτηση που επιστρέφει τύπο Datetime.

  •  16-01-2008, 12:03 39233 σε απάντηση της 39231

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Καλημέρα,

    για τρέξε αυτό στον SQL:

    select CONVERT(DATETIME,'23/12/2007 23:58:10',103)

    Νάσος


    "Success is the ability to go from one failure to another with no loss of enthusiasm."
    Winston Churchill

    "Quality means doing it right when no one is looking."
    Henry Ford

  •  16-01-2008, 12:54 39236 σε απάντηση της 39231

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Μάλλον ξέχασες να βάλεις την Return @middlestep? Έτσι όπως έγραψες τη συνάρτηση δεν μπορεί να δημιουργηθεί καν.

    Ο Νάσος έχει δίκιο. Μπορείς να κάνεις μετατροπή απλά καλώντας την Convert και περνώντας το κατάλληλο format string. Αυτό όμως θα πρέπει να το κάνεις μόνο όταν είναι απόλυτη ανάγκη, π.χ. θέλεις για κάποιο λόγο να δημιουργήσεις ένα string που περιέχει και την ημερομηνία. Σε where και join statements μπορείς να δουλέψεις με την ημερομηνία ως Datetime.

    Αν για κάποιο λόγο θέλεις να γράψεις την τιμή μίας ημερομηνίας, π.χ. για να θέσεις τιμή σε μία μεταβλητή datetime μπορείς να γράψεις την ημερομηνία με τη μορφή '20080116 13:23:24.000'. Ο SQL Server κάνει αυτόματα την μετατροπή από varchar σε Datetime και έτσι π.χ. μπορείς να γράψεις:

    Declare @mydate datetime
    Set @mydate = '20080116 13:23:24.000'


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-01-2008, 10:44 39321 σε απάντηση της 39236

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Οκ ευχαριστώ...Απλά δεν είχα καταλάβει με ποιον τρόπο αντιλαμβάνεται o sql server την ημερομηνία απο ένα string. Θεωρούσα οτι έπρεπε να είναι της μορφής '20080116132324000'    

      Παραθέτω τον κώδικα της συναρτησης που είχα φτιάξει, διορθωμένο...

    CREATE FUNCTION [dbo].[udf_Convert2DateTime] ( @InputDate CHAR(50) )

    RETURNS DATETIME

    BEGIN

    Declare @middleStep Char(50)
    Set  @middleStep = '20'+SubString(@InputDate,7,2)+SubString(@InputDate,4,2)+SubString(@InputDate,1,2) +substring(@InputDate,9,9)

    RETURN @middleStep
    END

     

  •  18-01-2008, 22:58 39340 σε απάντηση της 39321

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Αν ψάξεις στο Books Online θα βρεις όλες τις μορφές με τις οποίες αναπαριστώνται ή μετατρέπονται οι ημερομηνίες, ειδικά στην περιγραφή των CONVERT και CAST functions. Δεν έχω καταλάβει ακόμα όμως τί προσπαθείς να κάνεις. Η CONVERT μπορεί να χειριστεί ημερομηνίες της μορφής dd/mm/yy και yyyy, dd-mm-yy και yyyy, dd.mm.yy και yyyy. Μήπως τελικά αυτό που προσπαθείς να κάνεις γίνεται ήδη?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-01-2008, 11:17 39458 σε απάντηση της 39340

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Παναγιώτης Καναβός:
    Αν ψάξεις στο Books Online θα βρεις όλες τις μορφές με τις οποίες αναπαριστώνται ή μετατρέπονται οι ημερομηνίες, ειδικά στην περιγραφή των CONVERT και CAST functions. Δεν έχω καταλάβει ακόμα όμως τί προσπαθείς να κάνεις. Η CONVERT μπορεί να χειριστεί ημερομηνίες της μορφής dd/mm/yy και yyyy, dd-mm-yy και yyyy, dd.mm.yy και yyyy. Μήπως τελικά αυτό που προσπαθείς να κάνεις γίνεται ήδη?

    Βασικά το πρόβλημα μου δεν ήταν η απεικόνειση της ημερομηνίας αλλα η μετατροπή μιας string/varchar μεταβλητής σε datetime μεταβλητή όπου ήθελα να έχω και την ακρίβεια δευτερολέπτου.Ευχαριστώ παντως για την πολύτιμη βοήθεια.

  •  22-01-2008, 11:46 39459 σε απάντηση της 39458

    Απ: μετατροπή απο Varchar σε Datetime including ms

    Αυτό κάνει και η CONVERT. Μετατρέπει από varchar σε datetime ή το αντίστροφο. Για ξανακοίτα τη μήπως σου κάνει τη δουλειά.

     Η καλύτερη λύση πάντως είναι να μην χρησιμοποιήσεις καν varchar. Αν οι ημερομηνίες προέρχονται από τον client είναι πολύ καλύτερο και ευκολότερο να τις περάσεις ως παραμέτρους datetime. Ακόμα και αν ο client χρησιμοποιεί χύμα SQL μπορείς να φτιάξεις ένα parameterized query και να αφήσεις τον SQL Server να μεταφέρει σωστά την ημερομηνία με τη μέγιστη δυνατή ακρίβεια.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems