गेल्या ३० दिवसातील इव्हेंट शोधत आहे
आणखी एक सामान्य कार्य म्हणजे विशिष्ट तारीख श्रेणीशी संबंधित असलेल्या पंक्ती शोधणे. तत्वतः, जर श्रेणीच्या प्रारंभ आणि समाप्ती तारखा निश्चित केल्या असतील तर हे अवघड नाही: SQL तारखांची तसेच संख्यांची तुलना करू शकते.
तुलना ऑपरेटर तारखांवर लागू केले जाऊ शकतात: < , > , <= , इ. याशिवाय, एक विशेष ऑपरेटर आहे जो तारखांसह देखील कार्य करू शकतो. उदाहरणार्थ, 2022 च्या उन्हाळ्यात करणे आवश्यक असलेल्या टास्क टेबलमधून सर्व कार्ये निवडणारी क्वेरी लिहू. विनंती असे दिसेल:
SELECT * FROM task
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'
या क्वेरीचा परिणाम असेल:
आयडी | कर्मचारी_आयडी | नाव | अंतिम मुदत |
---|---|---|---|
१ | १ | फ्रंटएंडवरील बगचे निराकरण करा | 2022-06-01 |
2 | 2 | बॅकएंडवरील बगचे निराकरण करा | 2022-06-15 |
3 | ५ | कॉफी विकत घ्या | 2022-07-01 |
4 | ५ | कॉफी विकत घ्या | 2022-08-01 |
परंतु आम्हाला कार्ये मिळवायची असल्यास विनंतीमध्ये काय लिहावे, उदाहरणार्थ, गेल्या 30 दिवसांसाठी. जेथे शेवटचे 30 दिवस थेट क्वेरी अंमलबजावणी वेळेशी जोडलेले आहेत. म्हणजेच, जर क्वेरी 25 जुलै रोजी कार्यान्वित झाली असेल, तर तुम्हाला 25 जून ते 24 जुलै या तारखा निवडण्याची आवश्यकता आहे. वर्तमान वेळेला तारीख श्रेणी कशी बांधायची?
हे करण्यासाठी, तारीख जोडण्याचे कार्य वापरा:
DATE_ADD (date, INTERVAL expression units)
मला वाटते की काही उदाहरणांसह स्पष्ट करणे सोपे होईल:
# | विनंती | परिणाम |
---|---|---|
१ | DATE_ADD('2022-06-04', मध्यांतर 5 दिवस) | 2022-06-09 |
2 | DATE_ADD('2022-06-04', मध्यांतर 4 आठवडा) | 2022-07-02 |
3 | DATE_ADD('2022-06-04', मध्यांतर 2 महिना) | 2022-08-04 |
4 | ||
५ | DATE_SUB('2022-06-04', मध्यांतर 5 दिवस) | 2022-05-30 |
6 | DATE_SUB('2022-06-04', मध्यांतर 4 आठवडा) | 2022-05-07 |
७ | DATE_SUB('2022-06-04', मध्यांतर 2 महिना) | 2022-04-04 |
तसे, ठराविक तारखेपासून काही दिवस, आठवडे, महिने आणि वर्षे वजा करता येतात.
आणि जर आम्ही आमच्या विनंतीवर परत आलो - गेल्या 30 दिवसांचा डेटा मिळवण्यासाठी, आम्हाला या श्रेणीतील दोन तारखांची आवश्यकता आहे:
- CURDATE() - श्रेणीचा शेवट
- DATE_SUB( CURDATE() , INTERVAL 30 DAY) - श्रेणीची सुरुवात
विनंती असे दिसेल:
SELECT * FROM task WHERE task.deadline
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE()
या क्वेरीचा निकाल असा असेल (माझ्याकडे आज 4 जून 2022 आहे):
आयडी | कर्मचारी_आयडी | नाव | अंतिम मुदत |
---|---|---|---|
१ | १ | फ्रंटएंडवरील बगचे निराकरण करा | 2022-06-01 |
दोन तारखांमधील फरक कसा शोधायचा
आणि आणखी एक उपयुक्त वैशिष्ट्य. काहीवेळा तुम्हाला दोन तारखांमधील फरक दिवसांमध्ये मोजावा लागेल. हे करण्यासाठी, एसक्यूएलमध्ये एक विशेष कार्य आहे - DATEDIFF ().
तिच्याबरोबर काम करणे खूप सोपे आहे:
DATEDIFF (date 1, date 2)
दुसरी तारीख फक्त पहिल्या तारखेपासून वजा केली जाते. दिनांक 1 नंतर date2 आल्यास, परिणाम नकारात्मक असेल.
तसे, आम्ही DATEDIFF() फंक्शन वापरून आमची पूर्वीची क्वेरी पुन्हा लिहू शकतो. आम्हाला टास्क टेबलमधून सर्व कार्ये निवडण्याची आवश्यकता आहे ज्यांची अंतिम मुदत सध्याच्या तारखेपासून 30 दिवसांपेक्षा जास्त नाही. ती विनंती कशी दिसेल ते येथे आहे:
SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30
या क्वेरीचा निकाल असा असेल (माझ्याकडे आज 4 जून 2022 आहे):
आयडी | कर्मचारी_आयडी | नाव | अंतिम मुदत |
---|---|---|---|
१ | १ | फ्रंटएंडवरील बगचे निराकरण करा | 2022-06-01 |
2 | 2 | बॅकएंडवरील बगचे निराकरण करा | 2022-06-15 |
3 | ५ | कॉफी विकत घ्या | 2022-07-01 |
यावेळी, SQL ला तब्बल तीन पंक्ती आढळल्या. विचार करा मागच्या वेळी एक ओळ का होती आणि यावेळी तीन का?