2017-12-27 22 views
0

テーブルの平均年齢を調べようとしていますが、レコードの一部には年として0000があります。平均年齢ですが特定のレコードを除いて

平均年齢が高くなるので、これを回避するにはどうすればよいですか?

これは私が現在持っているものであり、それは112

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
+1

0000年を除外するにはwhere句を使用してください。 – Bob

+0

ちょうど脇に...あなたは 'datediff()'を使って年齢を計算してもよろしいですか?私の50歳の誕生日が明日であれば、「デートフリート」は私にちょうど49歳であることを示します。 – Joe

+0

'dob_yyyy'値の例を挙げることができますか? –

答えて

0

アウトフィルター "古代" の誕生日を返します:WHERE条件を追加する

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm.master_efields 
where dob_yyyy != '0000' 
0

てみてください。

Select AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
WHERE dob_yyyy <> '0000' 

またCASE WHENを導入することにより、ゼロではないとdob_yyyyを制限しようとすることができます。

Select AVG(CASE WHEN dob_yyyy <> '0000' THEN Datediff("yyyy",cast(dob_yyyy as int),getdate())) from ppm..master_efields 

さらに、一部のフィールドで平均年齢を表示する場合は、そのフィールドをGROUP BYすることを忘れないでください。

0

まず、dob_yyyyを整数にキャストする理由を教えてください。あなたは整数ではなく、日付を使うべきです。

dob_yyyyを文字列として保存している場合は、アプリケーションを修正して日付として保存する必要があります。しかし、それはあなたがやっていることであると仮定すると、私はあなたがしたいと思う:

Select AVG(Datediff(year, cast(dob_yyyy as date), getdate())) 
from ppm..master_efields 
where dob_yyyy not like '%-0000'; 

か:

where dob_yyyy not like '0000-%'; 

文字列の形式によって異なります。

0

WHERE句を使用して、無効な日付とNULLの生年月日の値をスキップします。

Select 
    AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate())) 
from ppm..master_efields 
WHERE (dob_yyyy IS NOT NULL) AND (dob_yyyy > '1900') 
関連する問題