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

 

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

Collation και Date Formats με διαφορετικά region settings -- Πως καταχωρούμε dates σε Greek Format small tut..

Îåêßíçóå áðü ôï ìÝëïò Panagiotis Kefalidis. Τελευταία δημοσίευση από το μέλος Panagiotis Kefalidis στις 11-01-2006, 23:27. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-01-2006, 21:18 8580

    Collation και Date Formats με διαφορετικά region settings -- Πως καταχωρούμε dates σε Greek Format small tut..

    Λοιπόν επειδή λογικά κάποιοι οι οποίοι τώρα ξεκινάτε να ασχολείστε με SQL Server, θα έχετε την απορία για πως μπορείτε να καταχωρήστε σε datetime πεδίο, ενα date σε ελληνικό format (dd/mm/yyy) και όχι στο international(yyyy/mm/dd) ή στο αμερικάνικο (mm/dd/yyy).

    Η αλήθεια είναι ότι απο default ο SQL SERVER δέχεται σαν φορμάτ μόνο το αμερικάνικο ή το international.Οποιαδήποτε άλλη προσπάθεια να κανέτε καταχώρηση ημερομηνίας σε ελληνικό φορμάτ, καταλήγει σε error.

    Πx. Το παρακάτω, βγάζει error:

    DECLARE @tDate AS datetime;
    SET @tDate = '31/12/2006';
    SELECT @tDate;

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

    Υπάρχουν μερικοί τρόποι τους οποίους αναλύω παρακάτω.

    Α) Μπορείτε να κάνετε set την var DATEFORMAT του SQL Server σε όποιο format θέλετε εσείς
    Πχ.
    SET DATEFORMAT dmy;
    DECLARE @tDate AS datetime;
    SET @tDate = '31/12/2006';
    SELECT @tDate;


    O παραπάνω κώδικας θα επιστρέψει αποτέλεσμα χωρίς λάθος, κάτι το οποίο σημαίνει οτι ακόμα και αν το query μας ήτανε INSERT και όχι SELECT ,ο SQL Server θα το δεχόταν ως valid date format.

    Ένας άλλος τρόπος είναι να αλλάξουνε το language setting του SQL Server.
    Πχ.
    SET LANGUAGE Greek;
    DECLARE @tDate AS datetime;
    SET @tDate = '31/12/2006';
    SELECT @tDate;


    Τα settings αυτά είναι runtime κάτι το οποίο σημαίνει οτι εάν γίνει restart ο SQL Server, αυτά χάνονται.

    Όμως, αν παρατηρήσετε, το OUTPUT format του date εξακολουθεί να είναι σε international format.
    Πώς μπορείτε να πάρετε την  ημερομηνία σε μορφή dd/mm/yyyy?Πολύ εύκολα!
    Αν χρησιμοποιήσετε την DATEPART, μπορείτε να κάνετε format την ημερομηνία.
    Πχ.
    SET DATEFORMAT dmy;
    DECLARE @tDate AS datetime;
    SET @tDate = '31/12/2006';
    SELECT DATEPART(dd,@tDate),DATEPART(mm,@tDate),DATEPART(yy,@tDate);


    Αυτό θα επιστρέψει:
    --- --- ---
    31 12 2006


    Επίσης ένας άλλος τρόπος είναι να χρησιμοποιήσετε της functions DAY,MONTH και YEAR:
    SET DATEFORMAT dmy;
    DECLARE @tDate AS datetime;
    SET @tDate = '31/12/2006';
    SELECT DAY(@tDate),MONTH(@tDate),YEAR(@tDate);


    Στην κυριολεξία η functions DAY,MONTH και YEAR είναι aliases των DATEPART(dd,datevar),DATEPART(mm,datevar) και DATEPART(yy,datevar) αντίστοιχα.

    Αυτά τα λίγα απο μένα..

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

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  11-01-2006, 22:00 8582 σε απάντηση της 8580

    Απ: Collation και Date Formats με διαφορετικά region settings -- Πως καταχωρούμε dates σε Greek Format small tut..

    Για να μετατρέψεις μια ημερομηνία σε κάποιο συγκεκριμένο format, μπορείς επίσης να χρησιμοποιήσεις την CONVERT function ή οποία όταν μετατρέπει ένα datetime τύπο σε character, δέχεται ένα τρίτο όρισμα που λέγεται style (sic). Π.χ :

    SELECT CONVERT(VARCHAR, OrderDate, 104) FROM Orders

    Το style 104 είναι το German και θα επιστρέψει την ημερομηνία σε format dd.mm.yy

    Μπορείτε να βρείτε λίστα με όλα τα styles στα BOL.


    Vir prudens non contra ventum mingit
  •  11-01-2006, 22:16 8583 σε απάντηση της 8580

    Απ: Collation και Date Formats με διαφορετικά region settings -- Πως καταχωρούμε dates σε Greek Format small tut..

     KelMan wrote:

    Για να μετατρέψεις μια ημερομηνία σε κάποιο συγκεκριμένο format, μπορείς επίσης να χρησιμοποιήσεις την CONVERT function ή οποία όταν μετατρέπει ένα datetime τύπο σε character, δέχεται ένα τρίτο όρισμα που λέγεται style (sic). Π.χ :

    SELECT CONVERT(VARCHAR, OrderDate, 104) FROM Orders

    Το style 104 είναι το German και θα επιστρέψει την ημερομηνία σε format dd.mm.yy

    Μπορείτε να βρείτε λίστα με όλα τα styles στα BOL.



    Το θέμα είναι να το επιστρέψει σε datetime πάλι και όχι σε varchar..Με το ίδιο τρόπο θα μπορούσε απλά να κάνει cast το κάθε DAY,MONTH,YEAR σε varchar και να το πάρει σε φορματ dd.mm.yyyy
    Πχ.
    SELECT CONVERT(varchar,DAY(@tDate)) + '/' + CONVERT(varchar,MONTH(@tDate)) + '/' + CONVERT(varchar,YEAR(@tDate));

    Πάντως αν το θέλει ο χρήστης σε varchar, τοτέ ναι, έχεις απόλυτο δίκιο αυτός είναι ένας τρόπος.

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  11-01-2006, 23:01 8584 σε απάντηση της 8580

    Απ: Collation και Date Formats με διαφορετικά region settings -- Πως καταχωρούμε dates σε Greek Format small tut..

    Χμμμ... Εγώ αναφέρθηκα στο δεύτερο κομμάτι σχετικά με το πως μπορείς να πάρεις την ημερομηνία σε μορφή dd/mm/yyyy. Στα παραδείγματά σου, το

    SELECT DATEPART(dd,@tDate),DATEPART(mm,@tDate),DATEPART(yy,@tDate);

    και το

    SELECT DAY(@tDate),MONTH(@tDate),YEAR(@tDate);

    δεν επιστρέφουν datetime Smile [:)]

    Πάντως, αυτό που λες να επιστραφεί πάλι σε datetime πεδίο δεν έχει νόημα γιατί ένα datetime πεδίο είναι πάντα datetime πεδίο και δεν παίζει ρόλο πως το φορμάρεις γιατί τελικά θα το κάνει render ο client με τον κατάλληλο τρόπο. Δηλαδή το φορμάρισμα έχει νόημα μόνο όταν χρειάζεσαι varchar.

     

     


    Vir prudens non contra ventum mingit
  •  11-01-2006, 23:16 8587 σε απάντηση της 8580

    Απ: Collation και Date Formats με διαφορετικά region settings -- Πως καταχωρούμε dates σε Greek Format small tut..

    Σορρυ, λάθος κατάλαβα εγώ στο τι είπες στο ποστ σου..
    My bad!
    Τα δυο κομμάτια μου πάντως επιστρέφουν integers..

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems