1. 程式人生 > >MySQL根據生日計算年齡的幾種方法比較

MySQL根據生日計算年齡的幾種方法比較

方法一

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age

方法一,作者也說出了缺陷,就是當日期為未來日期時結果為0,而不是負數;這裡使用了5個函式和兩個運算子。

方法二

SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age

方法二,解決了方法一為負數的問題,但看起來更復雜;這裡使用了6個函式和3個運算子。

看了這篇貼子後,我就暈了,怎麼會這麼複雜。我堅信一定有簡單高效的方法。很快就找到了根據以上方法改良後的方法。

改良後方法一和方法二

SELECT year( from_days( datediff( now( ), birthdate)));
SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));

改良後的方法一,少了一個函式和一個運算子,當日期為未來日期時計算結果還是為0;
改良後的方法二,還是6個函式和3個運算子,看起來簡單些;取日期的右邊五位,當日期格式為‘2013-01-01’時取到的是‘01-01’,沒有問題;當日期格式為‘2013-1-1’縮寫格式時,取右邊的五位取出的是‘3-1-1’,會導致出錯。

然後自己根據MYSQL的幫助文件中的日期函式想到了第三種方法:

方法三

SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422) 

取生日和當前日期之前的天數除以一年的實際天數(365天5小時48分46秒),然後取整。這樣只用了三個函式和一個運算子就搞定了。

然後,很快在國外網站找到了第四種方法:

方法四

 SELECT  TIMESTAMPDIFF(YEAR, @birthday, CURDATE()) 

這種方法只用了兩個函式就搞定了,應該是最佳方法了。

測試了一下以上四種方法,假如當前日期為'2017-1-13',當生日為‘2013-1-14’時,還差一天就要過生日了,離4歲只 差一天了,結果還是3歲,感覺不是很合理;把方法三改造一下,四捨五入得到方法五:

方法五

SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422) 

這樣計算出的年齡離實際的週歲最接近了,但可能方法四是最符合年齡定義的了。

相關推薦

MySQL根據生日計算年齡方法比較

方法一SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age 方法一,作者也說出了缺陷,就是當日期為未來日期時結果為0,而不是負數;這裡使用了5個函式和兩個運算子。方法二SELECT DATE_FORMAT(

關閉MySQL數據庫的方法

cnblogs shutdown admin min 推薦 pwd port -s stop #1.使用mysqldadmin mysqladmin -uroot -p shutdown mysqladmin -u ${mysql_user} -p${mysql_pw

Linux基礎------Shell數值計算方法

在Linux下總會遇到數值計算問題,由於Linux下變數都屬於弱變數,沒有變數型別的概念(貌似指令碼語言都是這樣)。 例如定義一個變數:x=1 此時的變數x預設是一個字串,即使看著像一個數字,所以當嘗試用如下的方法去進行計算的時候,得到的結果卻不是想要的 echo $x+=1 

mysql 優化sql語句的方法

化sql語句的幾種方法 1、通過show status命令瞭解SQL的執行效率 show [session|global]status like 'com_%'; 2、定位執行效率較低的SQL語句 1)慢查詢   開啟方法 linux: 配置檔案(/etc/m

句子相似度計算方法

在做自然語言處理的過程中,我們經常會遇到需要找出相似語句的場景,或者找出句子的近似表達,這時候我們就需要把類似的句子歸到一起,這裡面就涉及到句子相似度計算的問題,那麼本節就來了解一下怎麼樣來用 Python 實現句子相似度的計算。 基本方法 句子相似度計算我們一共歸類

Mysql按條件計數的方法

                最近在給喜樂喜樂網的後臺新增一系列的統計功能,遇到很多需要按條件計數的情況。嘗試了幾種方法,下面簡要記錄,供大家參考。問題描述為使討論簡單易懂,我將問題稍作簡化,去掉諸多的背景。從前有一個皇帝,他有50個妃子,這些妃子很沒有天理的給他生了100,000個兒子,於是,皇帝很苦惱,

windows下mysql每天定時備份資料庫方法

在windows中備份mysql 資料庫的方法有很多種,如有常用的WinRAR備份mysql、mysqldump備份成sql檔案、xcopy 直接複製檔案形式備份資料庫,下面我來總結一下這些方法,並給出相關例項。 第一種:新建批處理檔案 backup.dat,裡

結構化大資料計算方法(一)

         任何資料都要通過計算來產生價值才有意義,大資料也一樣。結構化大資料的計算能力的高低決定了大資料的實用性。          我總結了幾種常見的計算方法:API 、Script、SQL、類SQL。        1、  API:這是指沒有使用JDBC或OD

查詢MySQL資料庫中表結構的方法

什麼是表結構? 表結構就是定義資料表文件名,確定資料表包含哪些欄位,各欄位的欄位名、欄位型別、及寬度,並將這些資料輸入到計算機當中。 查詢方法: 以表‘employees’為例子 1.describe(desc)表名 desc 是 describe的縮

java根據生日計算年齡工具類

在開發中時常遇到要通過生日計算年齡的需求,這裡記錄一下 private static int getAgeByBirth(Date birthday) { int age = 0; try { Calendar no

PHP根據生日計算年齡(週歲)

<?php /** * 根據時間戳計算年齡 * @param $birth * @return mixed */ function howOld($birth) { list($birthYear, $birthMonth, $birthDay) = explode('-', date(

根據生日計算年齡

package demo1; import java.text.SimpleDateFormat; import java.util.Date; import org.junit.Test; public class getAge { @Test public voi

javascript根據生日計算年齡

var birthday=new Date("1989-06-25".replace(/-/g, "\/")); var d=new Date(); var age = d.getFullYear()-birthday.getFullYear()-((d.getMont

MySql避免重復插入記錄的方法

ble campaign 插入記錄 uniq 文章 select 應用 提高 朋友 本文章來給大家提供三種在mysql中避免重復插入記錄方法,主要是講到了ignore,Replace,ON DUPLICATE KEY UPDATE三種方法,有需要的朋友可以參考一下 方案

mysql數據庫優化的方法

myisam prim ant from 之間 全文索引 響應 edi 大數 1、選取最適用的字段屬性 MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更好的性能,我們可以將表中字段的寬度

優化MySQL性能的方法-總結

big 計算 保持 失敗 優化mysql sql one div 另一個 原文:http://bbs.landingbj.com/t-0-245601-1.html 1、要選取最適用的字段屬性 MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越

mysql寫註釋的方法

一個 之間 技術 bar tool gif title mys 多行 MySQL的註釋風格總的來說有三種、它們分別是 1、單行註釋可以用"#" select 1 as cname; #this is a comment +-------+ | cname | +

spark寫入mysql方法,針對不同場景

方法一:各個欄位都是提前定好的 val prop = new java.util.Properties prop.setProperty("user", "root") prop.setProperty("password", "123456") df1.write.mode(SaveMode

mysql匯出資料庫方法

mysql教程匯出資料庫教程幾種方法 方法一 cmd 到mysql bin目錄下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables databasename>database.sql 

Shell指令碼中計算字串長度的方法

1:wc -L wc -l (小寫)是獲取當前字串內容的行數,wc -L (大寫)可以獲取到當前行的長度,因此對於單獨行的字串可以用這個簡單的方法獲取。 $ str="123.?+ abc" $ echo "$str" |wc -L 10 2: expr lengt