கடந்த 30 நாட்களில் நடந்த நிகழ்வுகளைத் தேடுகிறோம்
ஒரு குறிப்பிட்ட தேதி வரம்பில் உள்ள வரிசைகளைத் தேடுவது மற்றொரு பொதுவான பணியாகும். கொள்கையளவில், வரம்பின் தொடக்க மற்றும் முடிவு தேதிகள் நிர்ணயிக்கப்பட்டால் இது கடினம் அல்ல: SQL தேதிகளையும் எண்களையும் ஒப்பிடலாம்.
ஒப்பீட்டு ஆபரேட்டர்கள் தேதிகளுக்குப் பயன்படுத்தப்படலாம்: < , > , <= , முதலியன. கூடுதலாக, தேதிகளுடன் வேலை செய்யக்கூடிய ஒரு சிறப்பு BETWEEN ஆபரேட்டர் உள்ளது. எடுத்துக்காட்டாக, 2022 கோடையில் செய்ய வேண்டிய பணி அட்டவணையில் இருந்து அனைத்து பணிகளையும் தேர்ந்தெடுக்கும் வினவலை எழுதுவோம். கோரிக்கை இப்படி இருக்கும்:
SELECT * FROM task
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'
இந்த வினவலின் முடிவு இப்படி இருக்கும்:
ஐடி | பணியாளர்_ஐடி | பெயர் | காலக்கெடுவை |
---|---|---|---|
1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 |
2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 |
3 | 5 | காபி வாங்கு | 2022-07-01 |
4 | 5 | காபி வாங்கு | 2022-08-01 |
ஆனால் கடந்த 30 நாட்களுக்கு, எடுத்துக்காட்டாக, பணிகளைப் பெற விரும்பினால் கோரிக்கையில் என்ன எழுத வேண்டும். வினவல் செயல்படுத்தும் நேரத்துடன் கடந்த 30 நாட்கள் நேரடியாக இணைக்கப்பட்டுள்ளது. அதாவது, வினவல் ஜூலை 25 அன்று செயல்படுத்தப்பட்டால், நீங்கள் ஜூன் 25 முதல் ஜூலை 24 வரையிலான தேதிகளைத் தேர்ந்தெடுக்க வேண்டும். தற்போதைய நேரத்துடன் தேதி வரம்பை எவ்வாறு பிணைப்பது?
இதைச் செய்ய, தேதி கூட்டல் செயல்பாட்டைப் பயன்படுத்தவும்:
DATE_ADD (date, INTERVAL expression units)
சில எடுத்துக்காட்டுகளுடன் விளக்குவது எளிதாக இருக்கும் என்று நினைக்கிறேன்:
# | கோரிக்கை | விளைவாக |
---|---|---|
1 | 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 | ||
5 | DATE_SUB('2022-06-04', இடைவேளை 5 நாள்) | 2022-05-30 |
6 | DATE_SUB('2022-06-04', இடைவேளை 4 வாரம்) | 2022-05-07 |
7 | 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):
ஐடி | பணியாளர்_ஐடி | பெயர் | காலக்கெடுவை |
---|---|---|---|
1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 |
இரண்டு தேதிகளுக்கு இடையிலான வேறுபாட்டை எவ்வாறு கண்டுபிடிப்பது
மற்றும் மற்றொரு பயனுள்ள அம்சம். சில நேரங்களில் நீங்கள் இரண்டு தேதிகளுக்கு இடையிலான வித்தியாசத்தை நாட்களில் கணக்கிட வேண்டும். இதைச் செய்ய, SQL க்கு ஒரு சிறப்பு செயல்பாடு உள்ளது - DATEDIFF ().
அவளுடன் வேலை செய்வது மிகவும் எளிதானது:
DATEDIFF (date 1, date 2)
இரண்டாவது தேதி முதல் தேதியிலிருந்து வெறுமனே கழிக்கப்படுகிறது. தேதி 1 க்குப் பிறகு தேதி2 வந்தால், முடிவு எதிர்மறையாக இருக்கும்.
DATEDIFF() செயல்பாட்டைப் பயன்படுத்தி நமது முந்தைய வினவலை மீண்டும் எழுதலாம். பணி அட்டவணையில் இருந்து அனைத்து பணிகளையும் தேர்ந்தெடுக்க வேண்டும், அதன் காலக்கெடு தற்போதைய தேதியிலிருந்து 30 நாட்களுக்கு மேல் வேறுபடாது. அந்த கோரிக்கை எப்படி இருக்கும் என்பது இங்கே:
SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30
இந்த வினவலின் முடிவு இப்படி இருக்கும் (எனக்கு இன்று ஜூன் 4, 2022):
ஐடி | பணியாளர்_ஐடி | பெயர் | காலக்கெடுவை |
---|---|---|---|
1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 |
2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 |
3 | 5 | காபி வாங்கு | 2022-07-01 |
இந்த நேரத்தில், SQL மூன்று வரிசைகளைக் கண்டறிந்தது. கடந்த முறை ஏன் ஒரு வரி இருந்தது, இந்த முறை மூன்று வரிகள் ஏன் என்று சிந்தியுங்கள்?