皆さん、こんにちは。
システム開発事業部の内田です。
今回はSQLServerにて年齢を取得してみようと思います。
環境はSQLServer2008R2です。
以下サイトを参考にして、OracleのクエリをSQLServerのクエリに置き換える形で取得していきます。
参考ページ
SELECT TRUNC((to_char(sysdate, 'yyyymmdd') - 19890810)/10000, 0)
上記のクエリで「23」が取得できます。
OracleではTRUNC()が切捨ての関数なので、SQLServerではROUND()関数(第3パラメータに0以外を指定すると切捨てを行う)を使用します。
以下、SQLServerで年齢を取得するクエリになります。
SELECT ROUND((CONVERT(VARCHAR, GETDATE(), 112) - '19890810')/10000, 0, 1)
しかし、システムによっては上記のように誕生日を文字列型で持っている場合もあると思います。
すると上記のクエリではデータ型のエラーになりますので、CONVERT関数で型を合わせてあげる必要があります。
SELECT ROUND(CONVERT(INT, (CONVERT(VARCHAR, GETDATE(), 112)) - CONVERT(INT, '19890810'))/10000, 0 , 1)
これで無事、年齢を取得することができました。
CONVERT関数に関しては以下のページでも紹介しているので、ぜひ参考にしてみてください。
(私もよくハマります。。)
CONVERTを使いこなそう!! ~日付編~