Το παρακάτω κείμενο αποτελεί απλά 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) αντίστοιχα.

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