Πέμπτη, 19 Ιανουαρίου 2006 2:47 πμ
από το μέλος
Panagiotis Kefalidis
INSERT date in datetime fields using Greek format
Το παρακάτω κείμενο αποτελεί απλά repost απο το dotnetzone forum , ενα
σύντομο tutorial που έγραψα για το πως μπορούμε να καταχωρήσουμε
ημερομηνίες σε ελληνικό format σε datetime πεδία στον SQL Server.
Λοιπόν επειδή λογικά κάποιοι οι οποίοι τώρα ξεκινάτε να ασχολείστε με
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) αντίστοιχα.
Αυτά τα λίγα απο μένα..
Ενημέρωση για Σχόλια
Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ
Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη
Software Engineer and Technical Evangelist at Microsoft. Focused on Azure and Server-Side stuff. Loves scalable code and high availability designs.