已知條件 表名為table 出生日期欄位 create_data
年齡欄位為age
求大神幫助
uj5u.com熱心網友回復:
這個簡單create_data-sysdate,就是出生的天數,想知道年,就/365。SELECT create_data 出生日期,(create_data-sysdate)/365 年齡 FROM 表名。
uj5u.com熱心網友回復:
說一下計算規則。是直接按年減,還是到月,還是到天?
uj5u.com熱心網友回復:
減反了
uj5u.com熱心網友回復:
這個現實應該更復雜吧,天數不一定都是365天?
uj5u.com熱心網友回復:
你這個表的設計顯然不符合范式。因為你從出生年月就可以計算出年齡,這樣你的age欄位就依賴于reate_date,而且兩者都是非主鍵,那么就違反了資料庫的第三范式。這種情況下該表的資料就存在不一致的問題,年齡如果要考慮周歲的問題,難到你要每天將該表中所有行的age更新一次。特別是資料量特別大的情況下。
在oracle11(好象是,記不清了)增加了虛擬列的概念和操作,年齡可以設定為虛擬列,虛擬列是根據非虛擬列通過公式計算出來的。是在創建表時設計的,但是虛擬列不能被update,在插入資料時不能插入資料。可以查詢,這樣可以簡化程式設計人員設計。
uj5u.com熱心網友回復:
非要這么做的話,看看between_month函式。floor函式update tablename set age=floor(between_month(sysdate-createdate)/12) where id=XXX;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/39936.html
標籤:開發
上一篇:Oracle回傳1000以上結果集比較慢(Mysql轉Oracle資料庫后,公司沒有DBA)
下一篇:Oracle撰寫一個程式塊
