通過 Formula計算年齡的問題

2021-08-06 02:53:49 字數 1081 閱讀 6753

現在描述一下情況:之前的系統中有一張表,已經有了各種資料,存入了生日列,最近需求要求計算一下年齡,當然這是乙個很小的需求,通過各種方式也都可以實現,比如後端從資料庫中查出資料後迴圈挨個計算,在實體中新增一列(列標明為@transient),將迴圈計算的結果存入該欄位,傳送到前端,前端直接顯示,亦或者後端不計算,需要前端顯示的時候通過對生日這一列做乙個計算,新增一列。但是還有一種方式,可能更直接一些,就是通過sql在資料庫中計算是不是更簡單一些呢。之前在看關於hibernate的書籍的時候看到過乙個註解@formula.是不是這個註解可以完成這個工作呢。帶著試試的態度玩一下(當然這個試試,是有目的的,那就是:只需成功,不許失敗)

但是一開始的嘗試,事與願違,各種嘗試,各種失敗,我將我踩得坑列在下面:

1.@formula(value="timestampdiff(year,birthday,now())")

我們都知道timestampdiff()函式是用來計算不同的時間型別的差值的函式,所以理論上這種方式應該是沒有問題的,但是萬惡的hibernate丟擲如下異常:

person0_.year,person0_.birthday,now()) as formula0_ from person person0_' at line 1

hibernate將型別year當成了乙個列,尷尬!

2 @formula(value = "select timestampdiff(year,p.birthday,now()) from person p where p.id = id")

那我要是明確的告訴hibernate,birthday才是我需要的列,year不是呢,會不會有效果呢。然並卵。hibernate還是丟擲同樣的異常。

3.@formula(value = "(select year(curdate())-year(p.birthday)-(right(curdate(),5)那就只能想一些其他的通過生日計算年齡的方法了。而這個計算方法中不要出現year這種型別出現。最終在網上找到了上面的函式方式,最終也驗證通過。

鼓掌。。。。。

最後的最後總算是沒有辜負自己這次嘗試,也希望自己以後還能多做一些嘗試。畢竟大牛都是通過不斷的嘗試積累出來的經驗,希望自己在通往大牛的路上繼續努力。

Mysql中通過生日計算年齡

方法一當前時間天數 生日天數 轉換年份 當前時間為 2020 07 04 此方法缺陷,就是當日期為未來日期時結果為0,而不是負數 方法二 當前時間為 2020 07 04 set dt1 str to date 2021 09 29 y m d 2021 09 29 select date form...

通過出生日期計算年齡

關於通過出生日期計算年齡的問題,通過baidu搜尋得到很多 貼了以下函式 function calcage datempdateofbirth as variant as integer calcage int datediff y datempdateofbirth,date 365.25 end...

通過身份證號計算年齡

sfzhm 計算年齡複製 var sfzhm document.getelementbyid sfzhm value if sfzhm.length 15 var date1 new date 取得當前日期 var year1 date1.getfullyear 取得當前年份 var month1 ...