2017-05-07 6 views
1

私は、誕生日とデータベースで作成された日付の2つの日付に基づいて人の年齢を把握したいと考えています。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分40秒)と日付です。

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()使用することができます。PostgreSQLの機能のすべてと同様に

SELECT age(date1,date1) 

を、そこにデータ型のバリエーションがあり、そしてあなたはこのような何かが必要になる場合があります

SELECT age(date1::date,date1::date) 
より正式

または、:

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

結果をbになります文字列として表示される電子間隔、:

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

あなたは

CONVERT(DATE, created_at) 

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

は、あなたが一年追加または減算する数ヶ月でリマインダーを使用できることを意味しますようヶ月での差を計算よりも可能性よりも、あなたはMSのSQLServerを使用している場合。

+0

表示形式のような拡張機能要件がある場合は、変換ではなくキャストを使用する – maSTAShuFu