Τα ημερολογιακά φίλτρα είναι σημαντικά σε όλες τις γλώσσες προγραμματισμού, αλλά πολλές φορές “σπάμε το κεφάλι μας” για το πως θα βρούμε την πρώτη Δευτέρα του τρέχοντος μήνα, για το πως θα ζητήσουμε την περίοδο των τελευταίων 40 ημερών κοκ. Αν και η λογική είναι παρόμοια σχεδόν σε όλες τις γλώσσες, η καθεμία έχει την ιδιαιτερότητα που μας κάνει να ξεχνάμε την ακριβή σύνταξη. Και επειδή χρησιμοποιούμε τον sql server συχνά σαν db engine για τα δεδομένα μας, ας δούμε μερικές χρήσιμες συναρτήσεις που βοηθούν στον προσδιορισμό των περιόδων.
Στον sql server χρήσιμες για τις ημερομηνίες είναι οι συναρτήσεις DATEADD και DATEDIFF. Η DATEADD σχηματίζει μια ημερομηνία βάσει μιας άλλης στην οποία θα προσθαφαιρεθεί ένα χρονικό διάστημα (ημέρες, μήνες κλπ.), ενώ η DATEDIFF προσδιορίζει το χρονικό διάστημα (σε ημέρες, μήνες κλπ.) σαν διαφορά μεταξύ δύο ημερομηνιών. Περαιτέρω εξηγήσεις είναι περιττές, ας προχωρήσουμε σε παραδείγματα:
- Τρεις μήνες πριν.
SELECT DATEADD(m, -3, GETDATE())
- Πρώτη μέρα του προηγούμενου μήνα.
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0)
- Τελευταία μέρα του προηγούμενου μήνα.
SELECT DATEADD(DAY, -(DAY(GETDATE())), GETDATE())
- Πρώτη ημέρα του τρέχοντος μήνα.
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)
- Τελευταία ημέρα του τρέχοντος μηνός.
SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
- Πρώτη ημέρα του επόμενου μήνα.
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)
- Τελευταία ημέρα του επόμενου μήνα.
SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 2, 0))
Αφήστε μια απάντηση