go backsqlschool blogs list

Η πρώτη μέρα της βδομάδας

by 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 που είναι ημέρα Τρίτη είναι η τρίτη ημέρα της βδομάδας.

Αν θέλουμε να θεωρήσουμε σαν πρώτη μέρα της βδομάδας τη Δευτέρα, τρέχουμε το παρακάτω:

SET DATEFIRST 1;
GO

Αν ξανατρέξουμε το αρχικό 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]

Ημερομηνία: 04 May 2016 20:58
Αξιολόγηση:
Κατηγορίες:
Tags:
Share it:

Αφήστε το σχόλιο σας - Leave your comment

Τα σχόλια έχουν κλείσει.
Επιτρέπονται μόνο τα σχόλια από τα μέλη του SqlSchool.gr.


newsletter subscription

Εάν επιθυμείτε να λαμβάνετε ενημέρωση από εμάς, δώστε μας το e-mail σας.
PASS chapter logo
Official Professional Association for SQL Server (PASS) chapter for Greece
Join to PASS