Η πρώτη μέρα της βδομάδας
Fivi Panopoulou - Sotiris Karras
Αν για μια ημερομηνία θέλουμε τον αριθμό της ημέρας μέσα στη βδομάδα, θα στραφούμε στην DATEPART, θα της δώσουμε σαν όρισμα το weekday ή dw και την ημερομηνία μας και θα μας επιστρέψει αυτό που θέλουμε. Ο αριθμός αυτός που παίρνουμε με αυτό τον τρόπο όμως, εξαρτάται από το ποιά θεωρούμε ότι είναι η πρώτη ημέρα της βδομάδας. Απο πού λοιπόν ξεκινάει αυτή η αρίθμηση;
H απάντηση σε αυτή την ερώτηση έρχεται από την @@DATEFIRST configuration function και μπορεί να αλλάξει με το SET DATEFIRST. Οι αριθμοί που λαμβάνουμε και θέτουμε αντόστοιχα ξεκινάνε με την Δευτέρα να είναι το 1, την Τριτη το 2 και ούτω καθεξής.
Τρέχοντας λοιπόν το εξής:
SELECT @@DATEFIRST, DATEPART(dw, '20160412');
GO
παίρνουμε σαν αποτέλεσμα στην πρώτη στήλη 7 και στη δεύτερη 3. Αυτό σημαίνει ότι η πρώτη μέρα της βδομάδας είναι η Κυριακή και έτσι η 12/04/2016 που είναι ημέρα Τρίτη είναι η τρίτη ημέρα της βδομάδας.
Αν θέλουμε να θεωρήσουμε σαν πρώτη μέρα της βδομάδας τη Δευτέρα, τρέχουμε το παρακάτω:
Αν ξανατρέξουμε το αρχικό query οι τιμές θα είναι 1 και 2 αντίστοιχα που σημαίνει ότι η 12/04/2016 που είναι Τρίτη είναι η δεύτερη μέρα της βδομάδας. Πρέπει να τονίσουμε ότι η αλλαγή αυτή ισχύει για το session στο οποίο βρισκόμαστε, και επομένως αν ανοίξουμε ένα άλλο session η πρώτη μέρα της βδομάδας θα είναι και πάλι η Κυριακή.
Επίσης, το DATEFIRST επηρεάζεται από τη γλώσσα, οπότε η αλλαγή του Language για το session θα αλλάξει και το datefirst setting, όπως φαίνεται στο παράδειγμα παρακάτω:
SELECT @@LANGUAGE, @@DATEFIRST;
GO
-- returns: us_english, 7
SET LANGUAGE 'Greek';
GO
-- Η ρύθμιση γλώσσας άλλαξε σε ελληνικά.
SELECT @@LANGUAGE, @@DATEFIRST ;
GO
-- returns: ελληνικά, 1
Μπορεί κανείς να δει την αντιστοιχία της γλώσσας με τη μέρα με την οποία ξεκινάει η βδομάδα από το sys.syslanguages ως εξής:
SELECT langid, alias, name, datefirst
FROM syslanguages;
GO
To default datefirst που έχουμε στο session προκύπτει από το default language του session το οποίο συνήθως είναι το default language που έχει ορισθεί για το login που χρησιμοποιούμε:
“The default language for a session is the language for that session's login, unless overridden on a per-session basis by using the Open Database Connectivity (ODBC) or OLE DB APIs” [https://technet.microsoft.com/en-us/library/ms190682%28v=sql.110%29.aspx]