YYYYMMDD書式の文字列から年齢を取得する
mj:df >データーベース >MySQL >YYYYMMDD書式の文字列から年齢を取得する
YYYYMMDD書式の文字列から年齢を取得するには下記のように記述します。
詳細は公式サイト参照。
SELECT
( YEAR( NOW() ) - SUBSTRING( '19820119' , 1 , 4 ) )
- ( DATE_FORMAT( NOW() , '%m%d' ) < SUBSTRING( '19820119' , 5 , 4 ) )
( YEAR( NOW() ) - SUBSTRING( '19820119' , 1 , 4 ) )
- ( DATE_FORMAT( NOW() , '%m%d' ) < SUBSTRING( '19820119' , 5 , 4 ) )
上記のクエリを解説すると、
① 年齢ですので本年と誕生年を減算します。
(クエリ左部)
② 算出日が誕生日に到来しているかどうかを比較します。
このクエリでは、本日の日付が誕生日より小さい場合に真(1)となる比較式を記述しています。
端的にいうと、まだ誕生日になっていない場合には年の引き算だけでは誕生日が来ていない場合でも年をとったことになるので、まだ、誕生日を迎えていない場合に、引き算するようにしています。
NOW()の示す日付が誕生日以降であれば、負(0)と評価されるので減算しても問題ないといったものです。
(クエリ右部)
<YYYYMM書式の場合...>
日付をYYYYMMの書式で保持する場合で、経過年数を取得するには以下のように記述します。
SELECT TRUNCATE( PERIOD_DIFF( DATE_FORMAT( NOW() , '%Y%m') , '198201' ) / 12 , 0 )
PERIOD_DIFF関数を使用すると、YYYYMM形式の文字列の月数の差を算出することができます。
取得したいのは年ですので現在時刻との差を12で除算します。
除算結果は実数になる場合もありますので、TRUNCATE関数にて切捨てを行っています。




