Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MYSQL MYSQL में दो तिथियों के बीच कस्टम महीने का अंतर कैसे करें?

मुझे लगता है कि यह प्रश्न वही करेगा जो आप चाहते हैं। यह उपयोग करता है

  (YEAR(CURDATE())*12+MONTH(CURDATE()))
- (YEAR(STR_TO_DATE(join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(join_date, '%d-%m-%Y'))) -
- 1

उपयोगकर्ता के लिए पूरे महीनों के अनुभव प्राप्त करने के लिए,

  DAY(LAST_DAY(STR_TO_DATE(join_date, '%d-%m-%Y')))
- DAY(STR_TO_DATE(join_date, '%d-%m-%Y'))
+ 1

पहले महीने में दिनों की संख्या प्राप्त करने के लिए, और

DAY(CURDATE())

चालू माह में दिनों की संख्या प्राप्त करने के लिए। दो दिन की गणना का योग किया जाता है और यदि कुल> 15 है, तो पूरे महीनों की संख्या में 1 जोड़ दिया जाता है, उदा.

SELECT id
     , name
     , (YEAR(CURDATE())*12+MONTH(CURDATE())) - (YEAR(STR_TO_DATE(join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(join_date, '%d-%m-%Y'))) - 1 -- whole months
       + CASE WHEN DAY(LAST_DAY(STR_TO_DATE(join_date, '%d-%m-%Y'))) - DAY(STR_TO_DATE(join_date, '%d-%m-%Y')) + 1 + DAY(CURDATE()) > 15 THEN 1 ELSE 0 END -- broken month
       AS months
FROM user

हम इस अभिव्यक्ति का उपयोग JOIN . के रूप में कर सकते हैं user . के बीच की स्थिति और allowed_exp_range उन सभी उपयोगकर्ताओं को खोजने के लिए जिनके पास एक निश्चित सीमा के भीतर अनुभव है:

SELECT u.id
     , u.name
     , a.starting_exp_months
     , a.end_exp_months
FROM user u
JOIN allowed_exp_range a
ON (YEAR(CURDATE())*12+MONTH(CURDATE())) - (YEAR(STR_TO_DATE(u.join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(u.join_date, '%d-%m-%Y'))) - 1
       + CASE WHEN DAY(LAST_DAY(STR_TO_DATE(u.join_date, '%d-%m-%Y'))) - DAY(STR_TO_DATE(u.join_date, '%d-%m-%Y')) + 1 + DAY(CURDATE()) > 15 THEN 1 ELSE 0 END
       BETWEEN a.starting_exp_months AND a.end_exp_months

आउटपुट (आपके नमूना डेटा के लिए, सभी उपयोगकर्ता शामिल हैं क्योंकि वे सभी एक अनुभव श्रेणी में फिट होते हैं):

id  name    starting_exp_months     end_exp_months
1   Sam     9                       24
2   Moe     9                       24
3   Tim     0                       6
4   Sal     9                       24
5   Joe     0                       6

मैंने एक छोटा dbfiddle पर डेमो बनाया है जो परिणाम पर पहुंचने के चरणों को प्रदर्शित करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql एक ही तालिका में प्रत्येक श्रेणी का सर्वश्रेष्ठ चयन करें

  2. Android ऐप से MySQL डेटाबेस में डेटा डालें। परिवर्तन डेटाबेस में परिलक्षित नहीं होते हैं

  3. एक MySQL डेटाबेस को CloudSQL से AWS RDS में माइग्रेट करना

  4. मुझे कैसे पता चलेगा कि मेरा डॉकटर mysql कंटेनर कब चालू है और mysql प्रश्न लेने के लिए तैयार है?

  5. MySQL में BigInt को Varchar में कास्ट/कन्वर्ट करें