SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.08<<123456789101112131415161718192021222324252627282930>>2017.10
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

以下のようにデータが与えられているとして、今年の誕生日は何日?っていうのは殆どの人が (現在の年) 年 (誕生月) 月 (誕生日) 日となるのだが、例外なケースが1つだけある。2月29日生まれの人。プログラミングとかなら例外処理で済ますのだろうが、データベースクエリとなるとそういうわけにもいかない(case whenとかもあるけど・・・)。ということで、ちょっと遊んでみる。

テーブル BIRTH

IDNAMEBIRTH_MONTHBIRTH_DAY
1'David'67
2'John'229
3'Michael'1231
select
date_add(concat('2000-',BIRTH_MONTH,'-',BIRTH_DAY),interval year(now())-2000 year)
as BIRTHDAY
from
BIRTH


このクエリだと、2月29日生まれの人のうるう年でない年の誕生日は2月28日となる。基準を2000年にしている理由は特にない。うるう年であれば良いだけだ。0年にしたかったが、どうも0年はうるう年とはみなされていないようなので(試したらエラーだった)、2000年にした。

うるう年でない年の誕生日を3月1日にしたいならば、
select
date_add(concat(year(now()),'-',BIRTH_MONTH,'-',1),interval BIRTH_DAY - 1 day)
as BIRTHDAY
from
BIRTH


こうすれば、3月1日になる。以下のクエリでも良いかも
select
makedate(year(now()), dayofyear(concat('2000-',BIRTH_MONTH,'-',BIRTH_DAY)))
as BIRTHDAY
from
BIRTH


テーマ:データベース - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。