日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > SQL編程之生日問題

SQL編程之生日問題

來源:程序員人生   發(fā)布時間:2014-11-03 08:22:55 閱讀次數(shù):2625次

在學(xué)習(xí)MySQL的時候,1個較為經(jīng)典的SQL編程題目就是生日問題,已知某個用戶的誕生日期和當(dāng)前日期,計(jì)算他最近的生日。

1般需要斟酌兩個問題

  • 閏年2月是29天
  • 今年的生日是不是過完

例如:某人的生日是1992年2月29日,當(dāng)前若當(dāng)前日期是2004年1月2日,那末他的最近生日是2004年2月29日;若當(dāng)前日期是2004年3月3日,那末他最近的生日則是2005年3月1日。

現(xiàn)在,利用SQL編程解決這個求生日的問題。

創(chuàng)建employees表

Create Table: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` enum('M','F') NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1

再插入1些數(shù)據(jù)

INSERT INTO `employees` VALUES ('10001', '1953⑴2⑴2', 'Georgi', 'Facello', 'M', '1986-06⑵6'); INSERT INTO `employees` VALUES ('10002', '1953⑴1⑴1', 'Bezalel', 'Simmel', 'F', '1985⑴1⑵1'); INSERT INTO `employees` VALUES ('10003', '1959⑴2-03', 'Parto', 'Bamford', 'M', '1986-08⑵8'); INSERT INTO `employees` VALUES ('10004', '1954-05-01', 'Chirstian', 'Koblick', 'M', '1986⑴2-01'); INSERT INTO `employees` VALUES ('10005', '1955-01⑵1', 'Kyoichi', 'Maliniak', 'M', '1989-09⑴2'); INSERT INTO `employees` VALUES ('10006', '1953-04⑵0', 'Anneke', 'Preusig', 'F', '1989-06-02'); INSERT INTO `employees` VALUES ('10007', '1957-05⑵3', 'Tzvetan', 'Zielinski', 'F', '1989-02⑴0'); INSERT INTO `employees` VALUES ('10008', '1958-02⑴9', 'Saniya', 'Kalloufi', 'M', '1994-09⑴5'); INSERT INTO `employees` VALUES ('10009', '1952-04⑴9', 'Sumant', 'Peac', 'F', '1985-02⑴8'); INSERT INTO `employees` VALUES ('10010', '1963-06-01', 'Duangkaew', 'Piveteau', 'F', '1989-08⑵4'); INSERT INTO `employees` VALUES ('10011', '1972-02⑵9', 'Jiang', 'David', 'M', '1990-02⑵0');

查看表中現(xiàn)有數(shù)據(jù),然后根據(jù)誕生日期,和當(dāng)前日期(2014⑴0⑶1)計(jì)算最近生日日期。



編寫SQL,計(jì)算最近生日日期

select name,birthday, if(cur>today,cur,next) as birth_day from ( select name,birthday,today, date_add(cur , interval if( day(birthday) = 29 && day(cur) = 28 , 1 , 0 ) day ) as cur, date_add(next , interval if( day(birthday) = 29 && day(cur) = 28 , 1 , 0 ) day ) as next from ( select name,birthday,today, date_add(birthday,interval diff year) as cur, date_add(birthday,interval diff+1 year) as next from ( select concat(last_name,' ',first_name) as name, birth_date as birthday, ( year(now()) - year(birth_date) ) as diff, now() as today from employees ) as a ) as b ) as c;

以上這段SQL程序的輸出



分析:

其中使用了3個子查詢a、b、c

a子查詢添加了1個年齡字段diff,用于子查詢b,a的查詢結(jié)果以下



子查詢b計(jì)算了,今年的生日日期cur和明年的生日日期next,b的查詢結(jié)果以下:



注意:這里對閏月的處理是2月28日(依照法律規(guī)定,閏年29日的生日在非閏年應(yīng)當(dāng)為3月1日),所以子查詢c用于處理閏月的問題,c的查詢結(jié)果以下:



最后,需要判斷當(dāng)前日期是不是大于今年的生日(今年是不是過完了生日),然后選取最近的生日,最后的答案是:





生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日韩在线观看av | 亚洲一区二区三区在线电影 | 亚洲影院一区 | 性生生活大片免费看视频 | 91看片在线观看视频 | 91精品久久久久久久久 | 久久国产精品-国产精品 | 国产一区在线免费观看 | 久久久久久久久国产 | 老司机成人网 | 国产精品久久久影院 | 欧美a级成人淫片免费看 | 久久99久 | 一级毛片在线 | 天堂аⅴ在线最新版在线 | 免费国产一区 | 亚洲成人国产 | 久久麻豆视频 | wwwww免费网站上线 | 亚洲精品一区二区三区不 | 一级aaa级毛片午夜在线播放 | 中文字幕三区 | 国产一区二区免费视频 | 黄网站在线观看 | 日韩欧美精品一区 | 99精品在线观看视频 | 亚洲不卡一区二区三区 | 亚洲www. | 色婷婷激情一区二区三区 | 亚洲欧美日韩一区二区 | 国产原创精品视频 | 久久www免费人成看片高清 | 亚洲精品在线免费 | 精品久久一区 | 精品人成 | 91精品国产综合久久久亚洲 | 国产一区二区免费在线观看 | 美女福利视频网站 | 国产一区二区三区四区hd | 精品久久久久久久久久久下田 | 可以在线观看的av网站 |