MySql生日閏月處理

來源:互聯網
上載者:User

標籤:

1. 科普下潤年:

①、非整百年能被4整除的為閏年。(如2004年就是閏年,2100年不是閏年)②、整百年能被400整除的是閏年。(如2000年是閏年,1900年不是閏年)  2. 例:例如:當前日期是2016年8月21日,有人出生在1972年2月29日,查詢後該使用者最近的生日應該是2017年3月1日(非閏年)。如果當前日期是2016年1月20日,那麼查詢後應該返回2016年2月29日(閏年)。  3. 初始資料

先安裝mysql官方樣本資料庫employees。沒安裝的可以參考:《MAC安裝MYSQL官方樣本資料庫EMPLOYEE》

  • 指令碼操作:
-- 建立表employeescreate table employees like employees.employees;-- 將employees庫的employees表資料插入到自己的表insert into employees    select * from employees.employees limit 0,10;-- 新增資料,生日為閏年1972-02-29insert into employees    select ‘10011‘,‘1972-02-29‘,‘Jiang‘,‘David‘,‘M‘,‘1990-2-20‘;

 

4. 查詢使用者和出生資訊

  • 語句:
-- 查詢使用者和出生資訊select concat(e.last_name, ‘  ‘, e.first_name) as Name, e.birth_date as BirthDate from employees e;
  • 查詢結果:

 

5. 實現

  5.1 查詢當前日期、當前日期和生日間隔的年數。

    • 代碼:
    • select concat(e.last_name, ‘  ‘, e.first_name) as Name,     e.birth_date  as BirthDay,    (year(now())-year(e.birth_date)) diff,    now() as todayfrom employees e
    • 結果:

      

 

        

  5.2 查詢當年的生日和下一年的生日。

    • 代碼:
      select name,birthday,today,    date_add(birthday, interval diff year) curr, -- 當年生日    date_add(birthday, interval diff+1 year) next    -- 下一年生日from (    select concat(e.last_name, ‘  ‘, e.first_name) as Name,         e.birth_date  as BirthDay,        (year(now())-year(e.birth_date)) diff,        now() as today    from employees e) as a
    • 查詢結果

      

 

   5.3 出生日期是29日,當年或下一年生日是28日,就將生日日期加1天

    • 代碼:
      select name,birthday,today,    date_add(curr, interval if(day(birthday)=29 && day(curr)=28, 1, 0) day) as cur, -- 閏年運行後的當年生日    date_add(next, interval if(day(birthday)=29 && day(next)=28, 1, 0) day) as next -- 閏年運行後的下一年生日from (    select name,birthday,today,        date_add(birthday, interval diff year) curr,  -- 當年生日        date_add(birthday, interval diff+1 year) next -- 下一年生日    from (    select concat(e.last_name, ‘  ‘, e.first_name) as Name,         e.birth_date  as BirthDay,        (year(now())-year(e.birth_date)) diff,        now() as today    from employees e    ) as a) as b
    • 查詢結果:

      

 

  5.4 最終代碼,如果當年生日已經過了就返回下一年生日。

    • 代碼:
      select name,birthday,    if(cur>today, cur, next) as birth_day -- 如果當年生日大於當前日期,生日為今年,否則為下一年from(    select name,birthday,today,        date_add(curr, interval if(day(birthday)=29 && day(curr)=28, 1, 0) day) as cur, -- 閏年運行後的當年生日        date_add(next, interval if(day(birthday)=29 && day(next)=28, 1, 0) day) as next -- 閏年運行後的下一年生日    from (        select name,birthday,today,            date_add(birthday, interval diff year) curr,  -- 當年生日            date_add(birthday, interval diff+1 year) next -- 下一年生日        from (        select concat(e.last_name, ‘  ‘, e.first_name) as Name,             e.birth_date  as BirthDay,            (year(now())-year(e.birth_date)) diff,            now() as today        from employees e        ) as a    ) as b) as c
    • 查詢結果:

      

 

  

 

MySql生日閏月處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.