sql >> Database teknologi >  >> RDS >> Mysql

MYSQL Hvordan udfører man tilpasset månedsforskel mellem to datoer i MYSQL?

Jeg tror, ​​at denne forespørgsel vil gøre, hvad du vil. Den bruger

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

for at få antallet af hele måneders oplevelse for brugeren,

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

for at få antallet af dage i den første måned, og

DAG(CURDATE()) 

for at få antallet af dage i den aktuelle måned. De to dages tællinger summeres, og hvis totalen er> 15, lægges 1 til antallet af hele måneder, f.eks.

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 -- hele måneder + 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 ANDES 0 END -- brudt måned AS monthsFROM user 

Vi kan bruge dette udtryk som en JOIN tilstand mellem bruger og allowed_exp_range for at finde alle brugere, der har erfaring inden for et givet område:

SELECT u.id , u.name , a.starting_exp_months , a.end_exp_monthsFROM user uJOIN allow_exp_range aON (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 ANDET 0 SLUT MELLEM a.starting_exp_months OG a.end_exp_months 

Output (for dine eksempeldata inkluderer alle brugere, da de alle passer ind i et af oplevelsesintervallerne):

id-navn start_exp_months end_exp_months1 Sam 9 242 Moe 9 243 Tim 0 64 Sal 9 245 Joe 0 6 

Jeg har oprettet en lille demo på dbfiddle som demonstrerer trinene i at nå frem til resultatet.




  1. Hvordan kan jeg VÆLGE den første række med MAX(kolonneværdi)?

  2. MySQL Inner Join-tabel baseret på kolonneværdi

  3. Importer en CSV-fil til SQL Server ved hjælp af SqlBulkCopy

  4. Kan ikke få Postgres i gang