通常は、何歳ということで「年」だけを取ってくればいいのですが、よくばって「月」まで計算しようとしています。PostgreSQL の場合は以下。
年をとるには
select extract(year from age(now(), '1960-8-22'))
月をとるには
select extract(month from age(now(), '1960-8-22'))
と、PostgreSQL の age() 関数にバリバリ、頼っているわけです。
で、ここからが本題。SQLite3 だったらどうしよう。
残念ながら age() 関数はありません。できることなら SQL 文一発で解決したいものです。そこで次のような SQL 文をいろいろググりながら作り上げました。
SELECT
((strftime('%Y%m%d', 'now')-strftime('%Y%m%d', birthday))/10000) AS Age,
case
when (strftime('%m', 'now') - strftime('%m', birthday)) < 0 then 12 + (strftime('%m', 'now') - strftime('%m', birthday))
else (strftime('%m', 'now') - strftime('%m', birthday))
end as Month
from
members
ちょっと「月」の部分の出方が違っていますが、解釈の違いということで。
0 件のコメント:
コメントを投稿