アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば以下のテーブルがあったとします。※年月日はDATE
従業員(ID,名前,勤務開始年月日,退職年月日)
退職していない従業員の退職年月日はnullが初期値として保持されます。このとき、例えば2009/2/10以前に退職した従業員情報をselectしたい場合
select * from 従業員 where 退職年月日 < 20090210
と実行した場合、null値は無視されて正常終了となりますか?
select * from 従業員 where 退職年月日 < 20090210 AND 退職年月日 IS NOT NULL
とする必要はありますか?
実行環境がないので教えてください。

A 回答 (4件)

NULLは値ではありません。


退職年月日 < 20090210 の条件式は退職年月日がNULLの時に'unknown'を返します。
ですから
AND 退職年月日 IS NOT NULL
の指定は必要ありません。
なお退職年月日がDATE型ならば適切な処理で"20080210"を時刻型にする必要があります。
これはRDBMSにより仕様が違いますので割愛させていただきます。
    • good
    • 4

#2回答者です。

追記します。

null値が検索対象になるかどうかは、#2での回答の通りです。

>select * from 従業員 where 退職年月日 < 20090210

date型に対する定数の指定は、お使いのRDBMSで正しいですか?
'yyyy-mm-dd'などの文字定数を、date型にキャストして変換してくれるRDBMSは多いと思いますが、数値での指定というのはあまり見たことがないので。
    • good
    • 0

null値は、等号や大小では比較ができない「不定な値」です。



>select * from 従業員 where 退職年月日 < 20090210
>と実行した場合、null値は無視されて正常終了となりますか?

標準SQLや主要なRDBMSでは、null値は検索対象となりません。

なお、Oracleでは「長さが0の文字列は、nullと等価」など、一部のRDBMSでは独自仕様を持っている可能性があるので、その点には注意してください。
    • good
    • 0

DBの種類やバージョンによって異なる可能性もありますが、


PostgreSQL8なら経験があるので、その条件で書きますね。

>select * from 従業員 where 退職年月日 < 20090210
select * from 従業員 where 退職年月日 < DATE '20090210'
これなら大丈夫だと思います。

ただし、これだとNULLもヒットすると思うので、
select * from 従業員
where 退職年月日 < DATE '20090210' AND 退職年月日 IS NOT NULL
にした方が良さそうです。

以上、ご参考になりましたら幸いです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A