2017-05-07 63 views
1

我想根據兩個日期來計算一個人的年齡:他們的生日和他們在數據庫中創建的日期。SQL中的舍入日期

雖然這個年齡是以天而不是年計算的。這裏是我的查詢:

SELECT date_of_birth as birthday, created_at, (created_at - date_of_birth) as Age 
FROM public.users 
WHERE date_of_birth IS NOT NULL 

的DATE_OF_BIRTH字段是一個日期W/O時間戳,但created_at字段是一個時間戳(例如2017年5月6日1點27分四十零秒)的日期。

而且我的輸出是這樣的:

0 years 0 mons 9645 days 1 hours 27 mins 40.86485 secs 

任何想法,我怎麼能圓/由最近一年計算年齡?

使用PostgreSQL。

+0

使用'EXTRACT'功能。 – zerkms

+0

請標記您真正使用的dbms – Sami

+0

您正在運行哪個SQL?他們在處理日期方面有很大的不同。 – Manngo

回答

0

在PostgreSQL中,日期的處理方式與MySQL的MSSQL &差別很大。事實上,它很好地遵循SQL標準,即使它並不總是直觀的。

去實際計算的東西的時代,你可以使用age()

SELECT age(date1,date1) 

像所有的PostgreSQL的功能外,還有數據類型的變化,你可能需要做這樣的事情:

SELECT age(date1::date,date1::date) 

或更正式:

SELECT age(cast(date1 as date),cast(date1 as date)) 

結果將b E中間隔,它顯示爲一個字符串:

SELECT age(current_date::date,'1981-01-17'::date); 
-- 36 years 3 mons 22 days 

如果你只是想在歲,你可以使用extract

SELECT extract('year' from age(current_date::date,'1981-01-17'::date)); 

最後,如果你想讓它正確的最近一年,你可以應用加半個間隔的老把戲:

extract('year' from age(current_date::date,'1981-01-17'::date)+interval '.5 year'); 

它不像其他一些DBMS產品那麼簡單,但它更靈活,如果你能夠解決它的話。

這裏有一些參考:

2

如果您正在使用MS SQLServer的比你能

CONVERT(DATE, created_at) 

,比個月計算像

DATEDIFF(month, created_at, GETDATE())/12 

意味着你可以使用提醒幾個月來添加或。減去1年差異。

+0

如果有擴展功能要求(如顯示格式),則使用cast而不是convert – maSTAShuFu