多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > SQL編程之生日問題

SQL編程之生日問題

來源:程序員人生   發布時間:2014-11-03 08:22:55 閱讀次數:2621次

在學習MySQL的時候,1個較為經典的SQL編程題目就是生日問題,已知某個用戶的誕生日期和當前日期,計算他最近的生日。

1般需要斟酌兩個問題

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

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

現在,利用SQL編程解決這個求生日的問題。

創建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些數據

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');

查看表中現有數據,然后根據誕生日期,和當前日期(2014⑴0⑶1)計算最近生日日期。



編寫SQL,計算最近生日日期

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的查詢結果以下



子查詢b計算了,今年的生日日期cur和明年的生日日期next,b的查詢結果以下:



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



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





生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩欧美综合在线二区三区 | 色综合久久综合欧美综合网 | 武则天级淫片a级中文 | 亚洲第一页在线播放 | 亚洲国产成人精品青青草原100 | 欧美成人 综合网播九公社 欧美成人18 | 久久精品国产第一区二区 | 欧美一级刺激毛片 | 尤物网站永久在线观看 | 精品国产一区二区三区免费看 | 激情做人爱免费视频 | 欧美一区二区三区性 | 国产精品久久久久一区二区 | 中国老头gay高清xxxx | 一区二区三区欧美日韩国产 | 噜噜噜噜噜在线观看视频 | 日韩中文一区 | jizz中国18 | 高清一区二区三区免费 | 噜噜噜噜噜视频在线观看 | 亚洲专区欧美专区 | 97理论三级九七午夜在线观看 | 老牛影视在线一区二观看 | 国产噜噜噜视频在线观看 | 中文字幕在线观看免费视频 | 青青国产成人精品视频 | 中文字幕第3页 | 亚欧乱色一区二区三区 | 欧美激情福利 | 大学生毛片a左线播放 | 天天拍夜夜添久久精品中文 | 国产成人+综合亚洲+天堂 | 国产欧美曰韩一区二区三区 | 男女激情动态视频 | 久久久成人影院 | 欧美高清正版在线 | 精品国产福利在线观看网址2022 | 亚洲成在人 | 亚洲黄色网址大全 | 亚洲欧洲国产成人精品 | 精品国产毛片 |